View | Details | Raw Unified | Return to bug 136946 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jdt/core/tests/compiler/regression/GenericTypeTest.java (-7 / +91 lines)
Lines 30434-30445 Link Here
30434
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=133071
30434
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=133071
30435
public void test0969() {
30435
public void test0969() {
30436
	this.runConformTest(
30436
	this.runConformTest(
30437
		new String[] {
30437
			new String[] {
30438
			"B.java", //================================
30438
				"B.java", //================================
30439
			"class B<T extends C> extends A<T> {}\n" + 
30439
				"class B<T extends C> extends A<T> {}\n" + 
30440
			"class C extends B<C> {}\n" + 
30440
				"class C extends B<C> {}\n" + 
30441
			"class A<T extends C> {}"
30441
				"class A<T extends C> {}"
30442
		},
30442
			},
30443
		"");
30443
			"");
30444
}
30445
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=136946
30446
public void test0970() {
30447
	this.runNegativeTest(
30448
			new String[] {
30449
				"X.java", //================================
30450
				"public interface X<T> { \n" + 
30451
				"        interface I1<T> extends X<T> {\n" + 
30452
				"                interface I2<T> extends I1<T> {\n" + 
30453
				"                }\n" + 
30454
				"\n" + 
30455
				"                interface I3<T> extends I1<T> {\n" + 
30456
				"                }\n" + 
30457
				"\n" + 
30458
				"                interface I4<T> extends I1.I2<T>, I1.I3<T> {    \n" + 
30459
				"                }\n" + 
30460
				"        }\n" + 
30461
				"}\n" + 
30462
				"class XSub<E> implements X<E> {\n" + 
30463
				"    I1<E> i1 = null;\n" + 
30464
				"    I1.I2<E> i2 = null;\n" + 
30465
				"    I1<E>.I2<E> i1i2 = null;\n" + 
30466
				"}\n"
30467
			},
30468
			"----------\n" + 
30469
			"1. ERROR in X.java (at line 16)\n" + 
30470
			"	I1<E>.I2<E> i1i2 = null;\n" + 
30471
			"	^^^^^^^^\n" + 
30472
			"The member type X.I1<E>.I2 cannot be qualified with a parameterized type, since it is static. Remove arguments from qualifying type X.I1<E>\n" + 
30473
			"----------\n");
30474
}
30475
//https://bugs.eclipse.org/bugs/show_bug.cgi?id=136946 - variation
30476
public void test0971() {
30477
	this.runNegativeTest(
30478
			new String[] {
30479
				"X.java", //================================
30480
				"----------\n" + 
30481
				"1. WARNING in X.java (at line 2)\n" + 
30482
				"	interface I1<T> extends X {\n" + 
30483
				"	                        ^\n" + 
30484
				"X is a raw type. References to generic type X<T> should be parameterized\n" + 
30485
				"----------\n" + 
30486
				"2. WARNING in X.java (at line 3)\n" + 
30487
				"	interface I2<T> extends I1 {\n" + 
30488
				"	                        ^^\n" + 
30489
				"X.I1 is a raw type. References to generic type X<T>.I1<T> should be parameterized\n" + 
30490
				"----------\n" + 
30491
				"3. WARNING in X.java (at line 6)\n" + 
30492
				"	interface I3<T> extends I1 {\n" + 
30493
				"	                        ^^\n" + 
30494
				"X.I1 is a raw type. References to generic type X<T>.I1<T> should be parameterized\n" + 
30495
				"----------\n" + 
30496
				"4. WARNING in X.java (at line 9)\n" + 
30497
				"	interface I4<T> extends I1.I2, I1.I3 {    \n" + 
30498
				"	                        ^^^^^\n" + 
30499
				"X.I1.I2 is a raw type. References to generic type X<T>.I1<T>.I2<T> should be parameterized\n" + 
30500
				"----------\n" + 
30501
				"5. WARNING in X.java (at line 9)\n" + 
30502
				"	interface I4<T> extends I1.I2, I1.I3 {    \n" + 
30503
				"	                               ^^^^^\n" + 
30504
				"X.I1.I3 is a raw type. References to generic type X<T>.I1<T>.I3<T> should be parameterized\n" + 
30505
				"----------\n" + 
30506
				"6. WARNING in X.java (at line 14)\n" + 
30507
				"	I1 i1 = null;\n" + 
30508
				"	^^\n" + 
30509
				"X.I1 is a raw type. References to generic type X<T>.I1<T> should be parameterized\n" + 
30510
				"----------\n" + 
30511
				"7. WARNING in X.java (at line 15)\n" + 
30512
				"	I1.I2 i2 = null;\n" + 
30513
				"	^^^^^\n" + 
30514
				"X.I1.I2 is a raw type. References to generic type X<T>.I1<T>.I2<T> should be parameterized\n" + 
30515
				"----------\n" + 
30516
				"8. ERROR in X.java (at line 16)\n" + 
30517
				"	I1<E>.I2 i1i2 = null;\n" + 
30518
				"	^^^^^^^^\n" + 
30519
				"The member type X.I1<E>.I2 cannot be qualified with a parameterized type, since it is static. Remove arguments from qualifying type X.I1<E>\n" + 
30520
				"----------\n"
30521
			},
30522
			"----------\n" + 
30523
			"1. ERROR in X.java (at line 16)\n" + 
30524
			"	I1<E>.I2<E> i1i2 = null;\n" + 
30525
			"	^^^^^^^^\n" + 
30526
			"The member type X.I1<E>.I2 cannot be qualified with a parameterized type, since it is static. Remove arguments from qualifying type X.I1<E>\n" + 
30527
			"----------\n");
30444
}
30528
}
30445
}
30529
}
(-)compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedQualifiedTypeReference.java (-6 / +7 lines)
Lines 43-51 Link Here
43
			this.typeArguments.length - 1);
43
			this.typeArguments.length - 1);
44
	}
44
	}
45
	public void checkBounds(ReferenceBinding type, Scope scope, int index) {
45
	public void checkBounds(ReferenceBinding type, Scope scope, int index) {
46
		if (type.enclosingType() != null)
46
		if (index > 0) {
47
			checkBounds(type.enclosingType(), scope, index - 1);
47
			checkBounds(type.enclosingType(), scope, index - 1);
48
48
		}
49
		if (type.isParameterizedType()) {
49
		if (type.isParameterizedType()) {
50
			ParameterizedTypeBinding parameterizedType = (ParameterizedTypeBinding) type;
50
			ParameterizedTypeBinding parameterizedType = (ParameterizedTypeBinding) type;
51
			ReferenceBinding currentType = parameterizedType.type;
51
			ReferenceBinding currentType = parameterizedType.type;
Lines 201-215 Link Here
201
				if (isClassScope)
201
				if (isClassScope)
202
					if (((ClassScope) scope).detectHierarchyCycle(currentType, this, null))
202
					if (((ClassScope) scope).detectHierarchyCycle(currentType, this, null))
203
						return null;
203
						return null;
204
				if (currentType.isGenericType()) {
204
				ReferenceBinding currentErasure = (ReferenceBinding)currentType.erasure();
205
				if (currentErasure.isGenericType()) {
205
	   			    if (typeIsConsistent && qualifiedType != null && qualifiedType.isParameterizedType()) {
206
	   			    if (typeIsConsistent && qualifiedType != null && qualifiedType.isParameterizedType()) {
206
						scope.problemReporter().parameterizedMemberTypeMissingArguments(this, scope.environment().createParameterizedType((ReferenceBinding)currentType.erasure(), null, qualifiedType));
207
						scope.problemReporter().parameterizedMemberTypeMissingArguments(this, scope.environment().createParameterizedType(currentErasure, null, qualifiedType));
207
						typeIsConsistent = false;
208
						typeIsConsistent = false;
208
					}
209
					}
209
	   			    qualifiedType = scope.environment().createRawType(currentType, qualifiedType); // raw type
210
	   			    qualifiedType = scope.environment().createRawType(currentErasure, qualifiedType); // raw type
210
				} else {
211
				} else {
211
					qualifiedType = (qualifiedType != null && qualifiedType.isParameterizedType())
212
					qualifiedType = (qualifiedType != null && qualifiedType.isParameterizedType())
212
													? scope.environment().createParameterizedType((ReferenceBinding)currentType.erasure(), null, qualifiedType)
213
													? scope.environment().createParameterizedType(currentErasure, null, qualifiedType)
213
													: currentType;
214
													: currentType;
214
				}
215
				}
215
			}
216
			}

Return to bug 136946