HEAD - Fix for 289892
diff --git a/buildnotes_jdt-core.html b/buildnotes_jdt-core.html
index 5e0ac44..5c0929c 100644
--- a/buildnotes_jdt-core.html
+++ b/buildnotes_jdt-core.html
@@ -50,7 +50,9 @@
<h2>What's new in this drop</h2>
<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=287833">287833</a>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=289892">289892</a>
+[compiler] NPE during binaryTypeBinding field initialization
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=287833">287833</a>
[formatter] Formatter removes the first character after the * in the <pre> tag
<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=238943">238943</a>
SortElementsOperation doesn't use project specific settings
diff --git a/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java b/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
index 6e25af2..b12a7b2 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
@@ -327,6 +327,21 @@
if (needFieldsAndMethods) {
createFields(binaryType.getFields(), sourceLevel, missingTypeNames);
createMethods(binaryType.getMethods(), sourceLevel, missingTypeNames);
+ boolean isViewedAsDeprecated = isViewedAsDeprecated();
+ if (isViewedAsDeprecated) {
+ for (int i = 0, max = this.fields.length; i < max; i++) {
+ FieldBinding field = this.fields[i];
+ if (!field.isDeprecated()) {
+ field.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
+ }
+ }
+ for (int i = 0, max = this.methods.length; i < max; i++) {
+ MethodBinding method = this.methods[i];
+ if (!method.isDeprecated()) {
+ method.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
+ }
+ }
+ }
}
if (this.environment.globalOptions.storeAnnotations)
setAnnotations(createAnnotations(binaryType.getAnnotations(), this.environment, missingTypeNames));
@@ -346,7 +361,6 @@
if (size > 0) {
this.fields = new FieldBinding[size];
boolean use15specifics = sourceLevel >= ClassFileConstants.JDK1_5;
- boolean isViewedAsDeprecated = isViewedAsDeprecated();
boolean hasRestrictedAccess = hasRestrictedAccess();
int firstAnnotatedFieldIndex = -1;
for (int i = 0; i < size; i++) {
@@ -370,8 +384,6 @@
field.id = i; // ordinal
if (use15specifics)
field.tagBits |= binaryField.getTagBits();
- if (isViewedAsDeprecated && !field.isDeprecated())
- field.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
if (hasRestrictedAccess)
field.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess;
if (fieldSignature != null)
@@ -571,14 +583,11 @@
return;
}
- boolean isViewedAsDeprecated = isViewedAsDeprecated();
boolean hasRestrictedAccess = hasRestrictedAccess();
this.methods = new MethodBinding[total];
if (total == initialTotal) {
for (int i = 0; i < initialTotal; i++) {
MethodBinding method = createMethod(iMethods[i], sourceLevel, missingTypeNames);
- if (isViewedAsDeprecated && !method.isDeprecated())
- method.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
if (hasRestrictedAccess)
method.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess;
this.methods[i] = method;
@@ -587,8 +596,6 @@
for (int i = 0, index = 0; i < initialTotal; i++) {
if (iClinit != i && (toSkip == null || toSkip[i] != -1)) {
MethodBinding method = createMethod(iMethods[i], sourceLevel, missingTypeNames);
- if (isViewedAsDeprecated && !method.isDeprecated())
- method.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
if (hasRestrictedAccess)
method.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess;
this.methods[index++] = method;