|
5 | 5 | import java.util.stream.Stream; |
6 | 6 |
|
7 | 7 | import liquidjava.utils.constants.Types; |
| 8 | +import spoon.reflect.code.CtBlock; |
| 9 | +import spoon.reflect.code.CtFor; |
| 10 | +import spoon.reflect.code.CtForEach; |
| 11 | +import spoon.reflect.code.CtIf; |
| 12 | +import spoon.reflect.code.CtTry; |
| 13 | +import spoon.reflect.code.CtWhile; |
8 | 14 | import spoon.reflect.cu.SourcePosition; |
9 | 15 | import spoon.reflect.declaration.CtAnnotation; |
| 16 | +import spoon.reflect.declaration.CtConstructor; |
10 | 17 | import spoon.reflect.declaration.CtElement; |
| 18 | +import spoon.reflect.declaration.CtMethod; |
11 | 19 | import spoon.reflect.factory.Factory; |
12 | 20 | import spoon.reflect.reference.CtTypeReference; |
13 | 21 |
|
@@ -69,4 +77,19 @@ private static boolean hasRefinementValue(CtAnnotation<?> annotation, String ref |
69 | 77 | Map<String, ?> values = annotation.getValues(); |
70 | 78 | return Stream.of("value", "to", "from").anyMatch(key -> refinement.equals(String.valueOf(values.get(key)))); |
71 | 79 | } |
| 80 | + |
| 81 | + public static SourcePosition getRealPosition(CtElement element) { |
| 82 | + if (element instanceof CtBlock<?> block) { |
| 83 | + CtElement parent = block.getParent(); |
| 84 | + if (parent instanceof CtIf ctIf) { |
| 85 | + if (ctIf.getThenStatement() == element) { |
| 86 | + return ctIf.getPosition(); |
| 87 | + } |
| 88 | + } else if (parent instanceof CtFor || parent instanceof CtForEach || parent instanceof CtWhile |
| 89 | + || parent instanceof CtTry || parent instanceof CtMethod<?> || parent instanceof CtConstructor<?>) { |
| 90 | + return parent.getPosition(); |
| 91 | + } |
| 92 | + } |
| 93 | + return element.getPosition(); |
| 94 | + } |
72 | 95 | } |
0 commit comments