Repository: quarkusio/quarkus
Issue: Build warnings when using quarkus-smallrye-health extension

**Describe the bug**
The following warnings are shown during the build:
```
[WARNING] [io.quarkus.arc.processor.Methods] Method io.smallrye.health.SmallRyeHealthReporter.getHealth() is final, skipped during generation of corresponding intercepted subclass
[WARNING] [io.quarkus.arc.processor.Methods] Method io.smallrye.health.SmallRyeHealthReporter.getHealth() is final, skipped during generation of corresponding client proxy
```

**Expected behavior**
No warnings

**Actual behavior**
Warning is shown


**To Reproduce**
Steps to reproduce the behavior:
1.
```
 mvn io.quarkus:quarkus-maven-plugin:0.17.0:create \\
    -DprojectGroupId=org.acme \\
    -DprojectArtifactId=getting-started \\
    -DclassName="org.acme.quickstart.GreetingResource" \\
    -Dpath="/hello" \\
    -Dextensions="quarkus-smallrye-health"
```
2. cd getting-started 
3. mvn package

**Environment (please complete the following information):**
 - Output of `uname -a` or `ver`: `Linux ggastald-laptop 5.1.6-300.fc30.x86_64 #1 SMP Fri May 31 17:43:23 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux`
 - Output of `java -version`: 
```
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_212-b03)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.212-b03, mixed mode)
```
 - GraalVM version (if different from Java): Not installed
 - Quarkus version or git rev: 0.17.0


Changed files:
independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/Methods.java

diff --git a/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/Methods.java b/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/Methods.java
index 4da53eac518..d9743970b7f 100644
--- a/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/Methods.java
+++ b/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/Methods.java
@@ -76,13 +76,7 @@ static void addDelegatingMethods(IndexView index, ClassInfo classInfo, Map<Metho
     }
 
     private static boolean skipForClientProxy(MethodInfo method) {
-        short flags = method.flags();
-        String className = method.declaringClass().name().toString();
-        if (Modifier.isFinal(flags) && !className.startsWith("java.")) {
-            LOGGER.warn(String.format("Method %s.%s() is final, skipped during generation of corresponding client proxy",
-                    className, method.name()));
-        }
-        if (Modifier.isStatic(flags) || Modifier.isFinal(flags) || Modifier.isPrivate(flags)) {
+        if (Modifier.isStatic(method.flags()) || Modifier.isPrivate(method.flags())) {
             return true;
         }
         if (IGNORED_METHODS.contains(method.name())) {
@@ -91,6 +85,15 @@ private static boolean skipForClientProxy(MethodInfo method) {
         if (method.declaringClass().name().equals(DotNames.OBJECT)) {
             return true;
         }
+        if (Modifier.isFinal(method.flags())) {
+            String className = method.declaringClass().name().toString();
+            if (!className.startsWith("java.")) {
+                LOGGER.warn(
+                        String.format("Method %s.%s() is final, skipped during generation of the corresponding client proxy",
+                                className, method.name()));
+            }
+            return true;
+        }
         return false;
     }
 
@@ -108,12 +111,23 @@ static void addInterceptedMethodCandidates(BeanDeployment beanDeployment, ClassI
             Set<AnnotationInstance> merged = new HashSet<>();
             merged.addAll(methodLevelBindings);
             for (AnnotationInstance classLevelBinding : classLevelBindings) {
-                if (methodLevelBindings.stream().noneMatch(a -> classLevelBinding.name().equals(a.name()))) {
+                if (methodLevelBindings.isEmpty()
+                        || methodLevelBindings.stream().noneMatch(a -> classLevelBinding.name().equals(a.name()))) {
                     merged.add(classLevelBinding);
                 }
             }
             if (!merged.isEmpty()) {
-                candidates.computeIfAbsent(new Methods.MethodKey(method), key -> merged);
+                if (Modifier.isFinal(method.flags())) {
+                    String className = method.declaringClass().name().toString();
+                    if (!className.startsWith("java.")) {
+                        LOGGER.warn(
+                                String.format(
+                                        "Method %s.%s() is final, skipped during generation of the corresponding intercepted subclass",
+                                        className, method.name()));
+                    }
+                } else {
+                    candidates.computeIfAbsent(new Methods.MethodKey(method), key -> merged);
+                }
             }
         }
         if (classInfo.superClassType() != null) {
@@ -125,14 +139,7 @@ static void addInterceptedMethodCandidates(BeanDeployment beanDeployment, ClassI
     }
 
     private static boolean skipForSubclass(MethodInfo method) {
-        short flags = method.flags();
-        String className = method.declaringClass().name().toString();
-        if (Modifier.isFinal(flags) && !className.startsWith("java.")) {
-            LOGGER.warn(
-                    String.format("Method %s.%s() is final, skipped during generation of corresponding intercepted subclass",
-                            className, method.name()));
-        }
-        if (Modifier.isStatic(flags) || Modifier.isFinal(flags)) {
+        if (Modifier.isStatic(method.flags())) {
             return true;
         }
         if (IGNORED_METHODS.contains(method.name())) {
@@ -141,6 +148,7 @@ private static boolean skipForSubclass(MethodInfo method) {
         if (method.declaringClass().name().equals(DotNames.OBJECT)) {
             return true;
         }
+        // We intentionally do not skip final methods here - these are handled later
         return false;
     }