Skip to content

Commit 468f733

Browse files
committed
Avoid infite loop while searching for invalidated element
1 parent 1fb5909 commit 468f733

1 file changed

Lines changed: 21 additions & 2 deletions

File tree

  • AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/logger/appender

‎AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/logger/appender/MessagerAppender.java‎

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,11 @@ private Element getElement() {
124124
return null;
125125
}
126126

127+
boolean ignorePackage = false;
127128
List<String> localElements = new LinkedList<>(elements);
128129
Element element = processingEnv.getElementUtils().getTypeElement(localElements.remove(0));
129130
while (localElements.size() > 0) {
131+
int prevSize = localElements.size();
130132
if (element instanceof ExecutableElement) {
131133
ExecutableElement method = (ExecutableElement) element;
132134
for (VariableElement param : method.getParameters()) {
@@ -138,18 +140,35 @@ private Element getElement() {
138140
}
139141
} else {
140142
for (Element elem : element.getEnclosedElements()) {
141-
if (elem.toString().equals(localElements.get(0))) {
143+
String elemStringValue = elem.toString();
144+
String localElement = localElements.get(0);
145+
if (ignorePackage) {
146+
elemStringValue = removePackages(elemStringValue);
147+
localElement = removePackages(localElement);
148+
}
149+
if (elemStringValue.equals(localElement)) {
142150
localElements.remove(0);
143151
element = elem;
144152
break;
145153
}
146154
}
147155
}
156+
if (prevSize == localElements.size()) {
157+
if (ignorePackage) {
158+
// return current element in case we have not found a
159+
// matching one in this round one - should not happen
160+
return element;
161+
}
162+
ignorePackage = true;
163+
}
148164
}
149-
150165
return element;
151166
}
152167

168+
private String removePackages(String elemStringValue) {
169+
return elemStringValue.replaceAll("([a-zA-Z_$][a-zA-Z_$0-9]*\\.)+", "");
170+
}
171+
153172
private ElementDetails getElementDetails() {
154173
Element element = getElement();
155174
return new ElementDetails(element, getAnnotationMirror(element));

0 commit comments

Comments
 (0)