Example usage for org.eclipse.jdt.internal.compiler.lookup TagBits AreFieldsSorted

List of usage examples for org.eclipse.jdt.internal.compiler.lookup TagBits AreFieldsSorted

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.compiler.lookup TagBits AreFieldsSorted.

Prototype

long AreFieldsSorted

To view the source code for org.eclipse.jdt.internal.compiler.lookup TagBits AreFieldsSorted.

Click Source Link

Usage

From source file:org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.java

License:Open Source License

public FieldBinding[] fields() {
    if ((this.tagBits & TagBits.AreFieldsComplete) != 0)
        return this.fields;

    int failed = 0;
    FieldBinding[] resolvedFields = this.fields;
    try {/* w  w w  .jav a  2  s  .co  m*/
        // lazily sort fields
        if ((this.tagBits & TagBits.AreFieldsSorted) == 0) {
            int length = this.fields.length;
            if (length > 1)
                ReferenceBinding.sortFields(this.fields, 0, length);
            this.tagBits |= TagBits.AreFieldsSorted;
        }
        for (int i = 0, length = this.fields.length; i < length; i++) {
            if (resolveTypeFor(this.fields[i]) == null) {
                // do not alter original field array until resolution is over, due to reentrance (143259)
                if (resolvedFields == this.fields) {
                    System.arraycopy(this.fields, 0, resolvedFields = new FieldBinding[length], 0, length);
                }
                resolvedFields[i] = null;
                failed++;
            }
        }
    } finally {
        if (failed > 0) {
            // ensure fields are consistent reqardless of the error
            int newSize = resolvedFields.length - failed;
            if (newSize == 0)
                return this.fields = Binding.NO_FIELDS;

            FieldBinding[] newFields = new FieldBinding[newSize];
            for (int i = 0, j = 0, length = resolvedFields.length; i < length; i++) {
                if (resolvedFields[i] != null)
                    newFields[j++] = resolvedFields[i];
            }
            this.fields = newFields;
        }
    }
    this.tagBits |= TagBits.AreFieldsComplete;
    return this.fields;
}

From source file:org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.java

License:Open Source License

public FieldBinding getField(char[] fieldName, boolean needResolve) {

    if ((this.tagBits & TagBits.AreFieldsComplete) != 0)
        return ReferenceBinding.binarySearch(fieldName, this.fields);

    // lazily sort fields
    if ((this.tagBits & TagBits.AreFieldsSorted) == 0) {
        int length = this.fields.length;
        if (length > 1)
            ReferenceBinding.sortFields(this.fields, 0, length);
        this.tagBits |= TagBits.AreFieldsSorted;
    }/* w  ww .j  a v  a 2  s  .  c om*/
    // always resolve anyway on source types
    FieldBinding field = ReferenceBinding.binarySearch(fieldName, this.fields);
    if (field != null) {
        FieldBinding result = null;
        try {
            result = resolveTypeFor(field);
            return result;
        } finally {
            if (result == null) {
                // ensure fields are consistent reqardless of the error
                int newSize = this.fields.length - 1;
                if (newSize == 0) {
                    this.fields = Binding.NO_FIELDS;
                } else {
                    FieldBinding[] newFields = new FieldBinding[newSize];
                    int index = 0;
                    for (int i = 0, length = this.fields.length; i < length; i++) {
                        FieldBinding f = this.fields[i];
                        if (f == field)
                            continue;
                        newFields[index++] = f;
                    }
                    this.fields = newFields;
                }
            }
        }
    }
    return null;
}