Skip to content

Commit 60a0d69

Browse files
committed
Fixes stack overflow #57
1 parent 3fe11bf commit 60a0d69

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

services/src/main/groovy/org/jd/gui/view/component/TypePage.groovy

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ abstract class TypePage extends CustomLineNumbersPage implements UriGettable, Ur
3535
this.entry = entry
3636
}
3737

38+
@Override
3839
protected boolean isHyperlinkEnabled(HyperlinkPage.HyperlinkData hyperlinkData) { hyperlinkData.reference.enabled }
3940

41+
@Override
4042
protected void openHyperlink(int x, int y, HyperlinkPage.HyperlinkData hyperlinkData) {
4143
if (hyperlinkData.reference.enabled) {
4244
// Save current position in history
@@ -74,12 +76,13 @@ abstract class TypePage extends CustomLineNumbersPage implements UriGettable, Ur
7476
}
7577

7678
// --- UriGettable --- //
77-
URI getUri() { entry.uri }
79+
@Override URI getUri() { entry.uri }
7880

7981
// --- UriOpenable --- //
8082
/**
8183
* @param uri for URI format, @see jd.gui.api.feature.UriOpenable
8284
*/
85+
@Override
8386
boolean openUri(URI uri) {
8487
List<DocumentRange> ranges = []
8588
def fragment = uri.fragment
@@ -289,11 +292,12 @@ abstract class TypePage extends CustomLineNumbersPage implements UriGettable, Ur
289292
}
290293

291294
// --- FocusedTypeGettable --- //
292-
String getFocusedTypeName() { typeDeclarations.floorEntry(textArea.caretPosition)?.value?.typeName }
295+
@Override String getFocusedTypeName() { typeDeclarations.floorEntry(textArea.caretPosition)?.value?.typeName }
293296

294-
Container.Entry getEntry() { entry }
297+
@Override Container.Entry getEntry() { entry }
295298

296299
// --- IndexesChangeListener --- //
300+
@Override
297301
@CompileStatic
298302
void indexesChanged(Collection<Indexes> collectionOfIndexes) {
299303
// Update the list of containers
@@ -306,12 +310,18 @@ abstract class TypePage extends CustomLineNumbersPage implements UriGettable, Ur
306310
boolean enabled
307311

308312
if (reference.name) {
309-
typeName = searchTypeHavingMember(typeName, reference.name, reference.descriptor, entry)
310-
if (typeName) {
311-
// Replace type with the real type containing the referenced member
312-
reference.typeName = typeName
313-
enabled = true
314-
} else {
313+
try {
314+
// Recursive search
315+
typeName = searchTypeHavingMember(typeName, reference.name, reference.descriptor, entry)
316+
if (typeName) {
317+
// Replace type with the real type having the referenced member
318+
reference.typeName = typeName
319+
enabled = true
320+
} else {
321+
enabled = false
322+
}
323+
} catch (Error ignore) {
324+
// Catch StackOverflowError or OutOfMemoryError
315325
enabled = false
316326
}
317327
} else {

0 commit comments

Comments
 (0)