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
/**
			 * Creates the control of the source attachment form.
			 */
			public Control createControl(Composite parent) {
		
				Display display= parent.getDisplay();
				fBackgroundColor= display.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
				fForegroundColor= display.getSystemColor(SWT.COLOR_LIST_FOREGROUND);
				fSeparatorColor= new Color(display, 152, 170, 203);
		
				JFaceResources.getFontRegistry().addListener(this);
		
				fScrolledComposite= new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
				fScrolledComposite.setAlwaysShowScrollBars(false);
				fScrolledComposite.setExpandHorizontal(true);
				fScrolledComposite.setExpandVertical(true);
				fScrolledComposite.addDisposeListener(new DisposeListener() {
					public void widgetDisposed(DisposeEvent e) {
						JFaceResources.getFontRegistry().removeListener(SourceAttachmentForm.this);
						fScrolledComposite= null;
						fSeparatorColor.dispose();
						fSeparatorColor= null;				
						fBannerLabels.clear();
						fHeaderLabels.clear();
						if (fFont != null) {
							fFont.dispose();
							fFont= null;
						}
					}
				});