Bug 82041 [misc] ClassFileEditor uses generic names for method arguments when source info is available in class file
Version: 3.1.0 Build id: 200412210800 When you open a class file that has no source attachment but has full debugging information the editor does not show the real names of method arguments. 1. Open a class file editor on a class file that does not have a source attachment but has local variable debugging info. 2. Notice that the method arguments have generic names "arg<n>" ClassFileEditor is not asking the class file reader to look in the method bodies for info. In ClassFileEditor#updateCodeView, change: int flags= IClassFileReader.FIELD_INFOS | IClassFileReader.METHOD_INFOS | IClassFileReader.SUPER_INTERFACES; to: int flags= IClassFileReader.FIELD_INFOS | IClassFileReader.METHOD_INFOS | IClassFileReader.METHOD_BODIES | IClassFileReader.SUPER_INTERFACES; It doesn't appear to parse all of the byte code of the method bodies so it shouldn't slow things down too much for large class files.
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileEditor.java
button= createButton(composite, JavaEditorMessages.getString("SourceAttachmentForm.button.changeAttachedSource")); 
				}
				button.addSelectionListener(getButtonListener(entry, containerPath, jproject));
			}
			
			private SelectionListener getButtonListener(final IClasspathEntry entry, final IPath containerPath, final IJavaProject jproject) {
				return new SelectionListener() {
					public void widgetSelected(SelectionEvent event) {				
						try {
							Shell shell= fScrolledComposite.getShell();
							IClasspathEntry result= BuildPathDialogAccess.configureSourceAttachment(shell, entry);
							if (result != null) {
								applySourceAttachment(shell, result, jproject, containerPath);
								verifyInput(getEditorInput());
							}
	
						} catch (CoreException e) {
							String title= JavaEditorMessages.getString("SourceAttachmentForm.error.title"); 
							String message= JavaEditorMessages.getString("SourceAttachmentForm.error.message"); 
							ExceptionHandler.handle(e, fScrolledComposite.getShell(), title, message);				
						}
					}
	
					public void widgetDefaultSelected(SelectionEvent e) {}
				};
			}
			
			protected void applySourceAttachment(Shell shell, IClasspathEntry newEntry, IJavaProject project, IPath containerPath) {
				try {
					IRunnableWithProgress runnable= SourceAttachmentBlock.getRunnable(shell, newEntry, project, containerPath);