|
10 | 10 | *******************************************************************************/ |
11 | 11 | package org.springframework.ide.vscode.boot.java.reconcilers; |
12 | 12 |
|
13 | | -import java.lang.reflect.Field; |
14 | 13 | import java.net.URI; |
15 | 14 | import java.util.ArrayList; |
| 15 | +import java.util.Iterator; |
16 | 16 | import java.util.List; |
17 | 17 | import java.util.Optional; |
18 | 18 |
|
|
34 | 34 | import org.springframework.ide.vscode.boot.java.jdt.refactoring.ChangeMethodVisibilityRefactoring.Visibility; |
35 | 35 | import org.springframework.ide.vscode.boot.java.jdt.refactoring.JdtFixDescriptor; |
36 | 36 | import org.springframework.ide.vscode.boot.java.jdt.refactoring.JdtRefactorings; |
| 37 | +import org.springframework.ide.vscode.boot.java.utils.ASTUtils; |
37 | 38 | import org.springframework.ide.vscode.commons.Version; |
38 | 39 | import org.springframework.ide.vscode.commons.java.IJavaProject; |
39 | 40 | import org.springframework.ide.vscode.commons.java.SpringProjectUtil; |
@@ -127,7 +128,7 @@ public void endVisit(CompilationUnit node) { |
127 | 128 | } |
128 | 129 |
|
129 | 130 | public static final boolean isNotOverridingPublicMethod(IMethodBinding methodBinding) { |
130 | | - return !isOverriding(methodBinding) && (methodBinding.getModifiers() & Modifier.PUBLIC) != 0; |
| 131 | + return methodBinding != null && (methodBinding.getModifiers() & Modifier.PUBLIC) != 0 && !isOverriding(methodBinding); |
131 | 132 | } |
132 | 133 |
|
133 | 134 | private void visitAnnotation(IJavaProject project, CompilationUnit cu, URI docUri, Annotation node, IProblemCollector problemCollector, List<Integer> problemOffsets, List<ReconcileProblemImpl> problems) { |
@@ -159,15 +160,18 @@ private void visitAnnotation(IJavaProject project, CompilationUnit cu, URI docUr |
159 | 160 | } |
160 | 161 |
|
161 | 162 | private static final boolean isOverriding(IMethodBinding binding) { |
162 | | - try { |
163 | | - if (binding != null) { |
164 | | - Field f = binding.getClass().getDeclaredField("binding"); |
165 | | - f.setAccessible(true); |
166 | | - org.eclipse.jdt.internal.compiler.lookup.MethodBinding value = (org.eclipse.jdt.internal.compiler.lookup.MethodBinding) f.get(binding); |
167 | | - return value.isOverriding(); |
| 163 | + ITypeBinding declaringClass = binding.getDeclaringClass(); |
| 164 | + if (declaringClass == null) { |
| 165 | + return false; |
| 166 | + } |
| 167 | + Iterator<ITypeBinding> hierarchy = ASTUtils.getHierarchyTypesBreadthFirstIterator(declaringClass); |
| 168 | + hierarchy.next(); |
| 169 | + while (hierarchy.hasNext()) { |
| 170 | + for (IMethodBinding inheritedMethod : hierarchy.next().getDeclaredMethods()) { |
| 171 | + if (binding.overrides(inheritedMethod)) { |
| 172 | + return true; |
| 173 | + } |
168 | 174 | } |
169 | | - } catch (Exception e) { |
170 | | - log.error("", e); |
171 | 175 | } |
172 | 176 | return false; |
173 | 177 | } |
|
0 commit comments