View | Details | Raw Unified | Return to bug 365519
Collapse All | Expand All

(-)a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java (-2 / +2 lines)
Lines 147-157 Link Here
147
 */
147
 */
148
public BinaryTypeBinding(PackageBinding packageBinding, IBinaryType binaryType, LookupEnvironment environment) {
148
public BinaryTypeBinding(PackageBinding packageBinding, IBinaryType binaryType, LookupEnvironment environment) {
149
	this.compoundName = CharOperation.splitOn('/', binaryType.getName());
149
	this.compoundName = CharOperation.splitOn('/', binaryType.getName());
150
	this.fPackage = packageBinding;
151
	this.modifiers = binaryType.getModifiers();
150
	computeId();
152
	computeId();
151
153
152
	this.tagBits |= TagBits.IsBinaryBinding;
154
	this.tagBits |= TagBits.IsBinaryBinding;
153
	this.environment = environment;
155
	this.environment = environment;
154
	this.fPackage = packageBinding;
155
	this.fileName = binaryType.getFileName();
156
	this.fileName = binaryType.getFileName();
156
157
157
	/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, even in a 1.4 project, we
158
	/* https://bugs.eclipse.org/bugs/show_bug.cgi?id=324850, even in a 1.4 project, we
Lines 165-171 Link Here
165
		: Binding.NO_TYPE_VARIABLES;
166
		: Binding.NO_TYPE_VARIABLES;
166
167
167
	this.sourceName = binaryType.getSourceName();
168
	this.sourceName = binaryType.getSourceName();
168
	this.modifiers = binaryType.getModifiers();
169
169
170
	if ((binaryType.getTagBits() & TagBits.HierarchyHasProblems) != 0)
170
	if ((binaryType.getTagBits() & TagBits.HierarchyHasProblems) != 0)
171
		this.tagBits |= TagBits.HierarchyHasProblems;
171
		this.tagBits |= TagBits.HierarchyHasProblems;
(-)a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/PackageBinding.java (-24 lines)
Lines 65-73 Link Here
65
	if (this.knownTypes == null)
65
	if (this.knownTypes == null)
66
		this.knownTypes = new HashtableOfType(25);
66
		this.knownTypes = new HashtableOfType(25);
67
	this.knownTypes.put(element.compoundName[element.compoundName.length - 1], element);
67
	this.knownTypes.put(element.compoundName[element.compoundName.length - 1], element);
68
	if (this.environment.globalOptions.isAnnotationBasedNullAnalysisEnabled)
69
		if (element.isAnnotationType() || element instanceof UnresolvedReferenceBinding) // unresolved types don't yet have the modifiers set
70
			checkIfNullAnnotationType(element);
71
}
68
}
72
69
73
void clearMissingTagBit() {
70
void clearMissingTagBit() {
Lines 260-286 Link Here
260
		if (!CharOperation.equals(packageName[i], typeName[i]))
257
		if (!CharOperation.equals(packageName[i], typeName[i]))
261
			return false;
258
			return false;
262
	return true;
259
	return true;
263
}
264
265
void checkIfNullAnnotationType(ReferenceBinding type) {
266
	// check if type is one of the configured null annotation types
267
	// if so mark as a well known type using the corresponding typeID:
268
	if (this.environment.nullableAnnotationPackage == this
269
			&& CharOperation.equals(type.compoundName, this.environment.getNullableAnnotationName())) {
270
		type.id = TypeIds.T_ConfiguredAnnotationNullable;
271
		if (!(type instanceof UnresolvedReferenceBinding)) // unresolved will need to check back for the resolved type
272
			this.environment.nullableAnnotationPackage = null; // don't check again
273
	} else if (this.environment.nonnullAnnotationPackage == this
274
			&& CharOperation.equals(type.compoundName, this.environment.getNonNullAnnotationName())) {
275
		type.id = TypeIds.T_ConfiguredAnnotationNonNull;
276
		if (!(type instanceof UnresolvedReferenceBinding)) // unresolved will need to check back for the resolved type
277
			this.environment.nonnullAnnotationPackage = null; // don't check again
278
	} else if (this.environment.nonnullByDefaultAnnotationPackage == this
279
			&& CharOperation.equals(type.compoundName, this.environment.getNonNullByDefaultAnnotationName())) {
280
		type.id = TypeIds.T_ConfiguredAnnotationNonNullByDefault;
281
		if (!(type instanceof UnresolvedReferenceBinding)) // unresolved will need to check back for the resolved type
282
			this.environment.nonnullByDefaultAnnotationPackage = null; // don't check again
283
	}
284
}
260
}
285
261
286
public TypeBinding getNullnessDefaultAnnotation(Scope scope) {
262
public TypeBinding getNullnessDefaultAnnotation(Scope scope) {
(-)a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java (-70 / +96 lines)
Lines 377-388 Link Here
377
377
378
public void computeId() {
378
public void computeId() {
379
	// try to avoid multiple checks against a package/type name
379
	// try to avoid multiple checks against a package/type name
380
	outerSwitch:
380
	switch (this.compoundName.length) {
381
	switch (this.compoundName.length) {
381
382
382
		case 3 :
383
		case 3 :
383
			if (!CharOperation.equals(TypeConstants.JAVA, this.compoundName[0])
384
			if (!CharOperation.equals(TypeConstants.JAVA, this.compoundName[0])
384
					&& !CharOperation.equals(TypeConstants.JAVAX, this.compoundName[0]))
385
					&& !CharOperation.equals(TypeConstants.JAVAX, this.compoundName[0]))
385
				return;
386
				break outerSwitch;
386
			
387
			
387
			char[] packageName = this.compoundName[1];
388
			char[] packageName = this.compoundName[1];
388
			if (packageName.length == 0) return; // just to be safe
389
			if (packageName.length == 0) return; // just to be safe
Lines 397-406 Link Here
397
								this.id = TypeIds.T_JavaxAnnotationPostConstruct;
398
								this.id = TypeIds.T_JavaxAnnotationPostConstruct;
398
							if (CharOperation.equals(typeName, TypeConstants.JAVAX_ANNOTATION_PREDESTROY[2]))
399
							if (CharOperation.equals(typeName, TypeConstants.JAVAX_ANNOTATION_PREDESTROY[2]))
399
								this.id = TypeIds.T_JavaxAnnotationPreDestroy;
400
								this.id = TypeIds.T_JavaxAnnotationPreDestroy;
400
							return;
401
							break outerSwitch;
401
					}
402
					}
402
				}
403
				}
403
				return;
404
				break outerSwitch;
404
			}
405
			}
405
			if (!CharOperation.equals(TypeConstants.LANG, this.compoundName[1])) {
406
			if (!CharOperation.equals(TypeConstants.LANG, this.compoundName[1])) {
406
				switch (packageName[0]) {
407
				switch (packageName[0]) {
Lines 410-455 Link Here
410
								case 'C' :
411
								case 'C' :
411
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_CLOSEABLE[2]))
412
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_CLOSEABLE[2]))
412
										this.typeBits |= TypeIds.BitCloseable; // don't assign id, only typeBit (for analysis of resource leaks) 
413
										this.typeBits |= TypeIds.BitCloseable; // don't assign id, only typeBit (for analysis of resource leaks) 
413
									return;
414
									break outerSwitch;
414
								case 'E' :
415
								case 'E' :
415
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_EXTERNALIZABLE[2]))
416
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_EXTERNALIZABLE[2]))
416
										this.id = TypeIds.T_JavaIoExternalizable;
417
										this.id = TypeIds.T_JavaIoExternalizable;
417
									return;
418
									break outerSwitch;
418
								case 'I' :
419
								case 'I' :
419
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_IOEXCEPTION[2]))
420
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_IOEXCEPTION[2]))
420
										this.id = TypeIds.T_JavaIoException;
421
										this.id = TypeIds.T_JavaIoException;
421
									return;
422
									break outerSwitch;
422
								case 'O' :
423
								case 'O' :
423
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_OBJECTSTREAMEXCEPTION[2]))
424
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_OBJECTSTREAMEXCEPTION[2]))
424
										this.id = TypeIds.T_JavaIoObjectStreamException;
425
										this.id = TypeIds.T_JavaIoObjectStreamException;
425
									return;
426
									break outerSwitch;
426
								case 'P' :
427
								case 'P' :
427
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_PRINTSTREAM[2]))
428
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_PRINTSTREAM[2]))
428
										this.id = TypeIds.T_JavaIoPrintStream;
429
										this.id = TypeIds.T_JavaIoPrintStream;
429
									return;
430
									break outerSwitch;
430
								case 'S' :
431
								case 'S' :
431
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_SERIALIZABLE[2]))
432
									if (CharOperation.equals(typeName, TypeConstants.JAVA_IO_SERIALIZABLE[2]))
432
										this.id = TypeIds.T_JavaIoSerializable;
433
										this.id = TypeIds.T_JavaIoSerializable;
433
									return;
434
									break outerSwitch;
434
							}
435
							}
435
						}
436
						}
436
						return;
437
						break outerSwitch;
437
					case 'u' :
438
					case 'u' :
438
						if (CharOperation.equals(packageName, TypeConstants.UTIL)) {
439
						if (CharOperation.equals(packageName, TypeConstants.UTIL)) {
439
							switch (typeName[0]) {
440
							switch (typeName[0]) {
440
								case 'C' :
441
								case 'C' :
441
									if (CharOperation.equals(typeName, TypeConstants.JAVA_UTIL_COLLECTION[2]))
442
									if (CharOperation.equals(typeName, TypeConstants.JAVA_UTIL_COLLECTION[2]))
442
										this.id = TypeIds.T_JavaUtilCollection;
443
										this.id = TypeIds.T_JavaUtilCollection;
443
									return;
444
									break outerSwitch;
444
								case 'I' :
445
								case 'I' :
445
									if (CharOperation.equals(typeName, TypeConstants.JAVA_UTIL_ITERATOR[2]))
446
									if (CharOperation.equals(typeName, TypeConstants.JAVA_UTIL_ITERATOR[2]))
446
										this.id = TypeIds.T_JavaUtilIterator;
447
										this.id = TypeIds.T_JavaUtilIterator;
447
									return;
448
									break outerSwitch;
448
							}
449
							}
449
						}
450
						}
450
						return;
451
						break outerSwitch;
451
				}
452
				}
452
				return;
453
				break outerSwitch;
453
			}
454
			}
454
455
455
			// remaining types MUST be in java.lang.*
456
			// remaining types MUST be in java.lang.*
Lines 461-571 Link Here
461
								this.id = TypeIds.T_JavaLangAutoCloseable;
462
								this.id = TypeIds.T_JavaLangAutoCloseable;
462
								this.typeBits |= TypeIds.BitAutoCloseable; 
463
								this.typeBits |= TypeIds.BitAutoCloseable; 
463
							}
464
							}
464
							return;
465
							break outerSwitch;
465
						case 14:
466
						case 14:
466
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ASSERTIONERROR[2]))
467
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ASSERTIONERROR[2]))
467
								this.id = TypeIds.T_JavaLangAssertionError;
468
								this.id = TypeIds.T_JavaLangAssertionError;
468
							return;
469
							break outerSwitch;
469
					}
470
					}
470
					return;
471
					break outerSwitch;
471
				case 'B' :
472
				case 'B' :
472
					switch (typeName.length) {
473
					switch (typeName.length) {
473
						case 4 :
474
						case 4 :
474
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_BYTE[2]))
475
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_BYTE[2]))
475
								this.id = TypeIds.T_JavaLangByte;
476
								this.id = TypeIds.T_JavaLangByte;
476
							return;
477
							break outerSwitch;
477
						case 7 :
478
						case 7 :
478
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_BOOLEAN[2]))
479
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_BOOLEAN[2]))
479
								this.id = TypeIds.T_JavaLangBoolean;
480
								this.id = TypeIds.T_JavaLangBoolean;
480
							return;
481
							break outerSwitch;
481
					}
482
					}
482
					return;
483
					break outerSwitch;
483
				case 'C' :
484
				case 'C' :
484
					switch (typeName.length) {
485
					switch (typeName.length) {
485
						case 5 :
486
						case 5 :
486
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_CLASS[2]))
487
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_CLASS[2]))
487
								this.id = TypeIds.T_JavaLangClass;
488
								this.id = TypeIds.T_JavaLangClass;
488
							return;
489
							break outerSwitch;
489
						case 9 :
490
						case 9 :
490
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_CHARACTER[2]))
491
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_CHARACTER[2]))
491
								this.id = TypeIds.T_JavaLangCharacter;
492
								this.id = TypeIds.T_JavaLangCharacter;
492
							else if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_CLONEABLE[2]))
493
							else if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_CLONEABLE[2]))
493
							    this.id = TypeIds.T_JavaLangCloneable;
494
							    this.id = TypeIds.T_JavaLangCloneable;
494
							return;
495
							break outerSwitch;
495
						case 22 :
496
						case 22 :
496
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_CLASSNOTFOUNDEXCEPTION[2]))
497
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_CLASSNOTFOUNDEXCEPTION[2]))
497
								this.id = TypeIds.T_JavaLangClassNotFoundException;
498
								this.id = TypeIds.T_JavaLangClassNotFoundException;
498
							return;
499
							break outerSwitch;
499
					}
500
					}
500
					return;
501
					break outerSwitch;
501
				case 'D' :
502
				case 'D' :
502
					switch (typeName.length) {
503
					switch (typeName.length) {
503
						case 6 :
504
						case 6 :
504
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_DOUBLE[2]))
505
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_DOUBLE[2]))
505
								this.id = TypeIds.T_JavaLangDouble;
506
								this.id = TypeIds.T_JavaLangDouble;
506
							return;
507
							break outerSwitch;
507
						case 10 :
508
						case 10 :
508
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_DEPRECATED[2]))
509
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_DEPRECATED[2]))
509
								this.id = TypeIds.T_JavaLangDeprecated;
510
								this.id = TypeIds.T_JavaLangDeprecated;
510
							return;
511
							break outerSwitch;
511
					}
512
					}
512
					return;
513
					break outerSwitch;
513
				case 'E' :
514
				case 'E' :
514
					switch (typeName.length) {
515
					switch (typeName.length) {
515
						case 4 :
516
						case 4 :
516
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ENUM[2]))
517
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ENUM[2]))
517
								this.id = TypeIds.T_JavaLangEnum;
518
								this.id = TypeIds.T_JavaLangEnum;
518
							return;
519
							break outerSwitch;
519
						case 5 :
520
						case 5 :
520
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ERROR[2]))
521
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ERROR[2]))
521
								this.id = TypeIds.T_JavaLangError;
522
								this.id = TypeIds.T_JavaLangError;
522
							return;
523
							break outerSwitch;
523
						case 9 :
524
						case 9 :
524
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_EXCEPTION[2]))
525
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_EXCEPTION[2]))
525
								this.id = TypeIds.T_JavaLangException;
526
								this.id = TypeIds.T_JavaLangException;
526
							return;
527
							break outerSwitch;
527
					}
528
					}
528
					return;
529
					break outerSwitch;
529
				case 'F' :
530
				case 'F' :
530
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_FLOAT[2]))
531
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_FLOAT[2]))
531
						this.id = TypeIds.T_JavaLangFloat;
532
						this.id = TypeIds.T_JavaLangFloat;
532
					return;
533
					break outerSwitch;
533
				case 'I' :
534
				case 'I' :
534
					switch (typeName.length) {
535
					switch (typeName.length) {
535
						case 7 :
536
						case 7 :
536
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_INTEGER[2]))
537
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_INTEGER[2]))
537
								this.id = TypeIds.T_JavaLangInteger;
538
								this.id = TypeIds.T_JavaLangInteger;
538
							return;
539
							break outerSwitch;
539
						case 8 :
540
						case 8 :
540
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ITERABLE[2]))
541
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ITERABLE[2]))
541
								this.id = TypeIds.T_JavaLangIterable;
542
								this.id = TypeIds.T_JavaLangIterable;
542
							return;
543
							break outerSwitch;
543
						case 24 :
544
						case 24 :
544
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ILLEGALARGUMENTEXCEPTION[2]))
545
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ILLEGALARGUMENTEXCEPTION[2]))
545
								this.id = TypeIds.T_JavaLangIllegalArgumentException;
546
								this.id = TypeIds.T_JavaLangIllegalArgumentException;
546
							return;
547
							break outerSwitch;
547
					}
548
					}
548
					return;
549
					break outerSwitch;
549
				case 'L' :
550
				case 'L' :
550
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_LONG[2]))
551
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_LONG[2]))
551
						this.id = TypeIds.T_JavaLangLong;
552
						this.id = TypeIds.T_JavaLangLong;
552
					return;
553
					break outerSwitch;
553
				case 'N' :
554
				case 'N' :
554
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_NOCLASSDEFERROR[2]))
555
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_NOCLASSDEFERROR[2]))
555
						this.id = TypeIds.T_JavaLangNoClassDefError;
556
						this.id = TypeIds.T_JavaLangNoClassDefError;
556
					return;
557
					break outerSwitch;
557
				case 'O' :
558
				case 'O' :
558
					switch (typeName.length) {
559
					switch (typeName.length) {
559
						case 6 :
560
						case 6 :
560
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_OBJECT[2]))
561
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_OBJECT[2]))
561
								this.id = TypeIds.T_JavaLangObject;
562
								this.id = TypeIds.T_JavaLangObject;
562
							return;
563
							break outerSwitch;
563
						case 8 :
564
						case 8 :
564
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_OVERRIDE[2]))
565
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_OVERRIDE[2]))
565
								this.id = TypeIds.T_JavaLangOverride;
566
								this.id = TypeIds.T_JavaLangOverride;
566
							return;
567
							break outerSwitch;
567
					}
568
					}
568
					return;
569
					break outerSwitch;
569
				case 'R' :
570
				case 'R' :
570
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_RUNTIMEEXCEPTION[2]))
571
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_RUNTIMEEXCEPTION[2]))
571
						this.id = 	TypeIds.T_JavaLangRuntimeException;
572
						this.id = 	TypeIds.T_JavaLangRuntimeException;
Lines 575-619 Link Here
575
						case 5 :
576
						case 5 :
576
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_SHORT[2]))
577
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_SHORT[2]))
577
								this.id = TypeIds.T_JavaLangShort;
578
								this.id = TypeIds.T_JavaLangShort;
578
							return;
579
							break outerSwitch;
579
						case 6 :
580
						case 6 :
580
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_STRING[2]))
581
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_STRING[2]))
581
								this.id = TypeIds.T_JavaLangString;
582
								this.id = TypeIds.T_JavaLangString;
582
							else if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_SYSTEM[2]))
583
							else if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_SYSTEM[2]))
583
								this.id = TypeIds.T_JavaLangSystem;
584
								this.id = TypeIds.T_JavaLangSystem;
584
							return;
585
							break outerSwitch;
585
						case 11 :
586
						case 11 :
586
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_SAFEVARARGS[2]))
587
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_SAFEVARARGS[2]))
587
								this.id = TypeIds.T_JavaLangSafeVarargs;
588
								this.id = TypeIds.T_JavaLangSafeVarargs;
588
							return;
589
							break outerSwitch;
589
						case 12 :
590
						case 12 :
590
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_STRINGBUFFER[2]))
591
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_STRINGBUFFER[2]))
591
								this.id = TypeIds.T_JavaLangStringBuffer;
592
								this.id = TypeIds.T_JavaLangStringBuffer;
592
							return;
593
							break outerSwitch;
593
						case 13 :
594
						case 13 :
594
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_STRINGBUILDER[2]))
595
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_STRINGBUILDER[2]))
595
								this.id = TypeIds.T_JavaLangStringBuilder;
596
								this.id = TypeIds.T_JavaLangStringBuilder;
596
							return;
597
							break outerSwitch;
597
						case 16 :
598
						case 16 :
598
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_SUPPRESSWARNINGS[2]))
599
							if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_SUPPRESSWARNINGS[2]))
599
								this.id = TypeIds.T_JavaLangSuppressWarnings;
600
								this.id = TypeIds.T_JavaLangSuppressWarnings;
600
							return;
601
							break outerSwitch;
601
					}
602
					}
602
					return;
603
					break outerSwitch;
603
				case 'T' :
604
				case 'T' :
604
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_THROWABLE[2]))
605
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_THROWABLE[2]))
605
						this.id = TypeIds.T_JavaLangThrowable;
606
						this.id = TypeIds.T_JavaLangThrowable;
606
					return;
607
					break outerSwitch;
607
				case 'V' :
608
				case 'V' :
608
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_VOID[2]))
609
					if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_VOID[2]))
609
						this.id = TypeIds.T_JavaLangVoid;
610
						this.id = TypeIds.T_JavaLangVoid;
610
					return;
611
					break outerSwitch;
611
			}
612
			}
612
		break;
613
		break;
613
614
614
		case 4:
615
		case 4:
615
			if (!CharOperation.equals(TypeConstants.JAVA, this.compoundName[0]))
616
			if (!CharOperation.equals(TypeConstants.JAVA, this.compoundName[0]))
616
				return;
617
				break outerSwitch;
617
			packageName = this.compoundName[1];
618
			packageName = this.compoundName[1];
618
			if (packageName.length == 0) return; // just to be safe
619
			if (packageName.length == 0) return; // just to be safe
619
620
Lines 628-665 Link Here
628
							case 'A' :
629
							case 'A' :
629
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_ANNOTATION[3]))
630
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_ANNOTATION[3]))
630
									this.id = TypeIds.T_JavaLangAnnotationAnnotation;
631
									this.id = TypeIds.T_JavaLangAnnotationAnnotation;
631
								return;
632
								break outerSwitch;
632
							case 'D' :
633
							case 'D' :
633
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_DOCUMENTED[3]))
634
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_DOCUMENTED[3]))
634
									this.id = TypeIds.T_JavaLangAnnotationDocumented;
635
									this.id = TypeIds.T_JavaLangAnnotationDocumented;
635
								return;
636
								break outerSwitch;
636
							case 'E' :
637
							case 'E' :
637
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_ELEMENTTYPE[3]))
638
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_ELEMENTTYPE[3]))
638
									this.id = TypeIds.T_JavaLangAnnotationElementType;
639
									this.id = TypeIds.T_JavaLangAnnotationElementType;
639
								return;
640
								break outerSwitch;
640
							case 'I' :
641
							case 'I' :
641
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_INHERITED[3]))
642
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_INHERITED[3]))
642
									this.id = TypeIds.T_JavaLangAnnotationInherited;
643
									this.id = TypeIds.T_JavaLangAnnotationInherited;
643
								return;
644
								break outerSwitch;
644
							case 'R' :
645
							case 'R' :
645
								switch (typeName.length) {
646
								switch (typeName.length) {
646
									case 9 :
647
									case 9 :
647
										if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_RETENTION[3]))
648
										if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_RETENTION[3]))
648
											this.id = TypeIds.T_JavaLangAnnotationRetention;
649
											this.id = TypeIds.T_JavaLangAnnotationRetention;
649
										return;
650
										break outerSwitch;
650
									case 15 :
651
									case 15 :
651
										if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_RETENTIONPOLICY[3]))
652
										if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_RETENTIONPOLICY[3]))
652
											this.id = TypeIds.T_JavaLangAnnotationRetentionPolicy;
653
											this.id = TypeIds.T_JavaLangAnnotationRetentionPolicy;
653
										return;
654
										break outerSwitch;
654
								}
655
								}
655
								return;
656
								break outerSwitch;
656
							case 'T' :
657
							case 'T' :
657
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_TARGET[3]))
658
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_ANNOTATION_TARGET[3]))
658
									this.id = TypeIds.T_JavaLangAnnotationTarget;
659
									this.id = TypeIds.T_JavaLangAnnotationTarget;
659
								return;
660
								break outerSwitch;
660
						}
661
						}
661
					}
662
					}
662
					return;
663
					break outerSwitch;
663
				case 'i':
664
				case 'i':
664
					if (CharOperation.equals(packageName, TypeConstants.INVOKE)) {
665
					if (CharOperation.equals(packageName, TypeConstants.INVOKE)) {
665
						if (typeName.length == 0) return; // just to be safe
666
						if (typeName.length == 0) return; // just to be safe
Lines 667-699 Link Here
667
							case 'M' :
668
							case 'M' :
668
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE[3]))
669
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE[3]))
669
									this.id = TypeIds.T_JavaLangInvokeMethodHandlePolymorphicSignature;
670
									this.id = TypeIds.T_JavaLangInvokeMethodHandlePolymorphicSignature;
670
								return;
671
								break outerSwitch;
671
						}
672
						}
672
					}
673
					}
673
					return;
674
					break outerSwitch;
674
				case 'r' :
675
				case 'r' :
675
					if (CharOperation.equals(packageName, TypeConstants.REFLECT)) {
676
					if (CharOperation.equals(packageName, TypeConstants.REFLECT)) {
676
						switch (typeName[0]) {
677
						switch (typeName[0]) {
677
							case 'C' :
678
							case 'C' :
678
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_REFLECT_CONSTRUCTOR[2]))
679
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_REFLECT_CONSTRUCTOR[2]))
679
									this.id = TypeIds.T_JavaLangReflectConstructor;
680
									this.id = TypeIds.T_JavaLangReflectConstructor;
680
								return;
681
								break outerSwitch;
681
							case 'F' :
682
							case 'F' :
682
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_REFLECT_FIELD[2]))
683
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_REFLECT_FIELD[2]))
683
									this.id = TypeIds.T_JavaLangReflectField;
684
									this.id = TypeIds.T_JavaLangReflectField;
684
								return;
685
								break outerSwitch;
685
							case 'M' :
686
							case 'M' :
686
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_REFLECT_METHOD[2]))
687
								if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_REFLECT_METHOD[2]))
687
									this.id = TypeIds.T_JavaLangReflectMethod;
688
									this.id = TypeIds.T_JavaLangReflectMethod;
688
								return;
689
								break outerSwitch;
689
						}
690
						}
690
					}
691
					}
691
					return;
692
					break outerSwitch;
692
			}
693
			}
693
			break;
694
			break;
694
		case 5 :
695
		case 5 :
695
			if (!CharOperation.equals(TypeConstants.JAVA, this.compoundName[0]))
696
			if (!CharOperation.equals(TypeConstants.JAVA, this.compoundName[0]))
696
				return;
697
				break outerSwitch;
697
			packageName = this.compoundName[1];
698
			packageName = this.compoundName[1];
698
			if (packageName.length == 0) return; // just to be safe
699
			if (packageName.length == 0) return; // just to be safe
699
700
Lines 712-725 Link Here
712
									if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE[3])
713
									if (CharOperation.equals(typeName, TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE[3])
713
											&& CharOperation.equals(memberTypeName, TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE[4]))
714
											&& CharOperation.equals(memberTypeName, TypeConstants.JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE[4]))
714
										this.id = TypeIds.T_JavaLangInvokeMethodHandlePolymorphicSignature;
715
										this.id = TypeIds.T_JavaLangInvokeMethodHandlePolymorphicSignature;
715
									return;
716
									break outerSwitch;
716
							}
717
							}
717
						}
718
						}
718
						return;
719
						break outerSwitch;
719
				}
720
				}
720
				return;
721
				break outerSwitch;
721
			}
722
			}
722
	}
723
	}
724
	if (this.fPackage != null) {
725
		LookupEnvironment env = this.fPackage.environment;
726
		if (env.globalOptions.isAnnotationBasedNullAnalysisEnabled) {
727
			if (isAnnotationType() || this instanceof UnresolvedReferenceBinding) {// unresolved types don't yet have the modifiers set
728
				// check if type is one of the configured null annotation types
729
				// if so mark as a well known type using the corresponding typeID:
730
				if (env.nullableAnnotationPackage == this.fPackage
731
						&& CharOperation.equals(this.compoundName, env.getNullableAnnotationName())) {
732
					this.id = TypeIds.T_ConfiguredAnnotationNullable;
733
					if (!(this instanceof UnresolvedReferenceBinding)) // unresolved will need to check back for the resolved type
734
						env.nullableAnnotationPackage = null; // don't check again
735
				} else if (env.nonnullAnnotationPackage == this.fPackage
736
						&& CharOperation.equals(this.compoundName, env.getNonNullAnnotationName())) {
737
					this.id = TypeIds.T_ConfiguredAnnotationNonNull;
738
					if (!(this instanceof UnresolvedReferenceBinding)) // unresolved will need to check back for the resolved type
739
						env.nonnullAnnotationPackage = null; // don't check again
740
				} else if (env.nonnullByDefaultAnnotationPackage == this.fPackage
741
						&& CharOperation.equals(this.compoundName, env.getNonNullByDefaultAnnotationName())) {
742
					this.id = TypeIds.T_ConfiguredAnnotationNonNullByDefault;
743
					if (!(this instanceof UnresolvedReferenceBinding)) // unresolved will need to check back for the resolved type
744
						env.nonnullByDefaultAnnotationPackage = null; // don't check again
745
				}
746
			}
747
		}
748
	}
723
}
749
}
724
750
725
/**
751
/**

Return to bug 365519