Fix CallinMarkerTest.testMarkers_4() as a witness for bug 303474:
- RoleType.getBaseClass() now supports explicit resolving relative to a value parameter, too
diff --git a/org.eclipse.jdt.core/model/org/eclipse/objectteams/otdt/internal/core/RoleType.java b/org.eclipse.jdt.core/model/org/eclipse/objectteams/otdt/internal/core/RoleType.java
index eff117f..1b60009 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/objectteams/otdt/internal/core/RoleType.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/objectteams/otdt/internal/core/RoleType.java
@@ -33,11 +33,13 @@
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaModelStatus;
import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeParameter;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers;
import org.eclipse.jdt.internal.core.JavaModelStatus;
+import org.eclipse.jdt.internal.core.TypeParameter;
import org.eclipse.jdt.internal.core.util.Util;
import org.eclipse.objectteams.otdt.core.IMethodMapping;
import org.eclipse.objectteams.otdt.core.IOTJavaElement;
@@ -320,11 +322,22 @@
else
{
IField field = currentType.getField(anchorField);
- if (!field.exists())
- return null;
-
- String fieldType = Signature.toString(field.getTypeSignature());
- anchorType = resolveInType(enclosingTeam, fieldType);
+ String fieldType = null;
+ if (field.exists()) {
+ fieldType = Signature.toString(field.getTypeSignature());
+ } else {
+ // try value parameter instead:
+ for (ITypeParameter param : currentType.getTypeParameters()) {
+ if (((TypeParameter)param).isValueParameter) {
+ if (param.getElementName().equals(anchorField)) {
+ fieldType = param.getBounds()[0]; // FIXME(SH): one value param only
+ break;
+ }
+ }
+ }
+ }
+ if (fieldType != null)
+ anchorType = resolveInType(enclosingTeam, fieldType);
}
if (anchorType == null || !anchorType.exists())
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/callinmarker/CallinMarkerTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/callinmarker/CallinMarkerTests.java
index 8fa1972..4aa6658 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/callinmarker/CallinMarkerTests.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/callinmarker/CallinMarkerTests.java
@@ -334,7 +334,7 @@
synchronousCreateMarkers(_baseResource);
Set<String> expectedMarkers = new HashSet<String>();
- expectedMarkers.add("=CallinMarker/src<cycle{B.java[B$R[A$Q~run");
+ expectedMarkers.add("=CallinMarker/src<cycle2{B.java[B[R~run");
IMarker[] markers = getCallinMarkers(_baseResource);
assertMarkers(expectedMarkers, markers);
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/A.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/A.java
index 8066b26..95e6a24 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/A.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/A.java
@@ -1,4 +1,4 @@
-package compileorder;
+package cycle2;
public team class A<B b> {
public void run() {
System.out.println("A.run()");
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/B.java
index fda6441..ddbfc2e 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/B.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/B.java
@@ -1,4 +1,4 @@
-package compileorder;
+package cycle2;
public team class B {
public class R playedBy A {
void run() <- replace void run();
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/TheTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/TheTest.java
index 2ded140..fe67108 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/TheTest.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/workspace/CallinMarker/src/cycle2/TheTest.java
@@ -1,4 +1,4 @@
-package compileorder;
+package cycle2;
public class TheTest {
final B b = new B();
final A a = new A<@b>();