412 // Check if there is a method whose user-declared parameter types are |
412 // Check if there is a method whose user-declared parameter types are |
413 // different (and thus has a different snippet) but whose compiled parameter |
413 // different (and thus has a different snippet) but whose compiled parameter |
414 // types are the same. if so, consider it an overwrite replacement. |
414 // types are the same. if so, consider it an overwrite replacement. |
415 private Status overwriteMatchingMethod(MethodSnippet msi) { |
415 private Status overwriteMatchingMethod(MethodSnippet msi) { |
416 String qpt = msi.qualifiedParameterTypes(); |
416 String qpt = msi.qualifiedParameterTypes(); |
|
417 List<MethodSnippet> matching = state.methods() |
|
418 .filter(sn -> |
|
419 sn != null |
|
420 && sn != msi |
|
421 && sn.status().isActive() |
|
422 && sn.name().equals(msi.name()) |
|
423 && qpt.equals(sn.qualifiedParameterTypes())) |
|
424 .collect(toList()); |
417 |
425 |
418 // Look through all methods for a method of the same name, with the |
426 // Look through all methods for a method of the same name, with the |
419 // same computed qualified parameter types |
427 // same computed qualified parameter types |
420 Status overwrittenStatus = null; |
428 Status overwrittenStatus = null; |
421 for (MethodSnippet sn : state.methods()) { |
429 for (MethodSnippet sn : matching) { |
422 if (sn != null && sn != msi && sn.status().isActive() && sn.name().equals(msi.name())) { |
430 overwrittenStatus = sn.status(); |
423 if (qpt.equals(sn.qualifiedParameterTypes())) { |
431 SnippetEvent se = new SnippetEvent( |
424 overwrittenStatus = sn.status(); |
432 sn, overwrittenStatus, OVERWRITTEN, |
425 SnippetEvent se = new SnippetEvent( |
433 false, msi, null, null); |
426 sn, overwrittenStatus, OVERWRITTEN, |
434 sn.setOverwritten(); |
427 false, msi, null, null); |
435 secondaryEvents.add(se); |
428 sn.setOverwritten(); |
436 state.debug(DBG_EVNT, |
429 secondaryEvents.add(se); |
437 "Overwrite event #%d -- key: %s before: %s status: %s sig: %b cause: %s\n", |
430 state.debug(DBG_EVNT, |
438 secondaryEvents.size(), se.snippet(), se.previousStatus(), |
431 "Overwrite event #%d -- key: %s before: %s status: %s sig: %b cause: %s\n", |
439 se.status(), se.isSignatureChange(), se.causeSnippet()); |
432 secondaryEvents.size(), se.snippet(), se.previousStatus(), |
|
433 se.status(), se.isSignatureChange(), se.causeSnippet()); |
|
434 } |
|
435 } |
|
436 } |
440 } |
437 return overwrittenStatus; |
441 return overwrittenStatus; |
438 } |
442 } |
439 |
443 |
440 private String computeQualifiedParameterTypes(AnalyzeTask at, MethodSnippet msi) { |
444 private String computeQualifiedParameterTypes(AnalyzeTask at, MethodSnippet msi) { |