Bug 94160 - [1.5][search] Generic method in superclass does not exist
Summary: [1.5][search] Generic method in superclass does not exist
Status: CLOSED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.1   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.1 RC2   Edit
Assignee: Frederic Fusier CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 97209
  Show dependency tree
 
Reported: 2005-05-09 13:01 EDT by David Saff CLA
Modified: 2005-06-10 06:51 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description David Saff CLA 2005-05-09 13:01:32 EDT
Given code:

package a;
import java.util.ArrayList;
import java.util.List;

public class ATest {
	<T> List<T> generateList(Class<T> clazz) {
		return new ArrayList<T>();
	}
}

class CTest extends ATest {
	private List<String> myList = generateList(String.class);
	
	CTest() {
		myList = new ArrayList<String>();
	}
}

If I try to Pull Up field myList, hitting "Finish" generates "Unexpected error
while performing the refactoring.  See error log for more information."  Error
log says:

java.lang.reflect.InvocationTargetException
at
org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:90)
at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
Caused by: Java Model Exception: Java Model Status
[gmock(Class<IProgressMonitor>)
{key=Lorg/jmock/generic/GenericMockObjectTestCase;.gmock<T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/String;)Lorg/jmock/generic/GenericMock<TT;>;}
[in GenericMockObjectTestCase [in GenericMockObjectTestCase.java [in
org.jmock.generic [in src [in org.jmock]]]]] does not exist]
at
org.eclipse.jdt.internal.core.JavaElement.newNotPresentException(JavaElement.java:468)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:499)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:232)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:218)
at org.eclipse.jdt.internal.core.Member.getFlags(Member.java:147)
at
org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.adjustOutgoingVisibility(MemberVisibilityAdjustor.java:671)
at
org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.adjustOutgoingVisibility(MemberVisibilityAdjustor.java:690)
at
org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.adjustOutgoingVisibility(MemberVisibilityAdjustor.java:722)
at
org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.adjustVisibility(MemberVisibilityAdjustor.java:763)
at
org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoring.createChangeManager(PullUpRefactoring.java:951)
at
org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoring.checkFinalConditions(PullUpRefactoring.java:617)
at
org.eclipse.ltk.core.refactoring.CheckConditionsOperation.run(CheckConditionsOperation.java:84)
at
org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:114)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1716)
at
org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:86)
... 1 more
Root exception:
Java Model Exception: Java Model Status [gmock(Class<IProgressMonitor>)
{key=Lorg/jmock/generic/GenericMockObjectTestCase;.gmock<T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/lang/String;)Lorg/jmock/generic/GenericMock<TT;>;}
[in GenericMockObjectTestCase [in GenericMockObjectTestCase.java [in
org.jmock.generic [in src [in org.jmock]]]]] does not exist]
at
org.eclipse.jdt.internal.core.JavaElement.newNotPresentException(JavaElement.java:468)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:499)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:232)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:218)
at org.eclipse.jdt.internal.core.Member.getFlags(Member.java:147)
at
org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.adjustOutgoingVisibility(MemberVisibilityAdjustor.java:671)
at
org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.adjustOutgoingVisibility(MemberVisibilityAdjustor.java:690)
at
org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.adjustOutgoingVisibility(MemberVisibilityAdjustor.java:722)
at
org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.adjustVisibility(MemberVisibilityAdjustor.java:763)
at
org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoring.createChangeManager(PullUpRefactoring.java:951)
at
org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoring.checkFinalConditions(PullUpRefactoring.java:617)
at
org.eclipse.ltk.core.refactoring.CheckConditionsOperation.run(CheckConditionsOperation.java:84)
at
org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:114)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1716)
at
org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:86)
at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
Comment 1 Dirk Baeumer CLA 2005-05-09 17:39:32 EDT
David, which build are you using ?
Comment 2 David Saff CLA 2005-05-10 05:58:23 EDT
Just confirmed on I20050509-2010
Comment 3 Tobias Widmer CLA 2005-05-25 09:07:24 EDT
It seems like there is something wrong with the resolved source method 
for 'generateList' which the search engine returns during visibility checking.

The output of toString() looks as follows:

generateList(Class<String>) (not open) 
{key=LC;.generateList<T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)
Ljava/util/List<TT;>;} [in C [in [Working copy] C.java [in <default> [in 
<project root> [in Test]]]]]

The type arguments encoded in the key do not match the parameter types of the 
Java element.

Calling #getFlags() then causes the exception

Moving to JDT Core for comments
Comment 4 Philipe Mulet CLA 2005-06-03 11:01:50 EDT
+1 for RC2
Comment 5 Frederic Fusier CLA 2005-06-06 04:08:43 EDT
Fixed and released in HEAD.

Method handle was not correct due to the fact it was built on parameterized
method binding instead of original one.

Now search engine correctly find messages sent in field declaration.

[jdt-core internal]
Change done in MethodLocator.reportDeclaration(...)
Test case added in JavaSearcgBugsTests
Comment 6 Olivier Thomann CLA 2005-06-06 16:38:54 EDT
Verified using N20050606-0010 + JDT/Core HEAD
Comment 7 Jerome Lanneluc CLA 2005-06-10 06:51:03 EDT
Verified with I20050610-0010.