Example usage for org.eclipse.jdt.internal.compiler.lookup TypeBinding problemId

List of usage examples for org.eclipse.jdt.internal.compiler.lookup TypeBinding problemId

Introduction

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

Prototype

public int problemId() 

Source Link

Usage

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

License:Open Source License

public final TypeBinding getType(char[][] compoundName, int typeNameLength) {
    if (typeNameLength == 1) {
        // Would like to remove this test and require senders to specially handle base types
        TypeBinding binding = getBaseType(compoundName[0]);
        if (binding != null)
            return binding;
    }/*from  w  w  w .ja  va 2 s  .  c om*/

    CompilationUnitScope unitScope = compilationUnitScope();
    unitScope.recordQualifiedReference(compoundName);
    Binding binding = getTypeOrPackage(compoundName[0],
            typeNameLength == 1 ? Binding.TYPE : Binding.TYPE | Binding.PACKAGE, true);
    if (binding == null) {
        char[][] qName = new char[][] { compoundName[0] };
        return new ProblemReferenceBinding(qName,
                environment().createMissingType(compilationUnitScope().getCurrentPackage(), qName),
                ProblemReasons.NotFound);
    }
    if (!binding.isValidBinding()) {
        if (binding instanceof PackageBinding) {
            char[][] qName = new char[][] { compoundName[0] };
            return new ProblemReferenceBinding(qName, environment().createMissingType(null, qName),
                    ProblemReasons.NotFound);
        }
        return (ReferenceBinding) binding;
    }
    int currentIndex = 1;
    boolean checkVisibility = false;
    if (binding instanceof PackageBinding) {
        PackageBinding packageBinding = (PackageBinding) binding;
        while (currentIndex < typeNameLength) {
            binding = packageBinding.getTypeOrPackage(compoundName[currentIndex++]); // does not check visibility
            if (binding == null) {
                char[][] qName = CharOperation.subarray(compoundName, 0, currentIndex);
                return new ProblemReferenceBinding(qName,
                        environment().createMissingType(packageBinding, qName), ProblemReasons.NotFound);
            }
            if (!binding.isValidBinding())
                return new ProblemReferenceBinding(CharOperation.subarray(compoundName, 0, currentIndex),
                        binding instanceof ReferenceBinding
                                ? (ReferenceBinding) ((ReferenceBinding) binding).closestMatch()
                                : null,
                        binding.problemId());
            if (!(binding instanceof PackageBinding))
                break;
            packageBinding = (PackageBinding) binding;
        }
        if (binding instanceof PackageBinding) {
            char[][] qName = CharOperation.subarray(compoundName, 0, currentIndex);
            return new ProblemReferenceBinding(qName, environment().createMissingType(null, qName),
                    ProblemReasons.NotFound);
        }
        checkVisibility = true;
    }

    // binding is now a ReferenceBinding
    ReferenceBinding typeBinding = (ReferenceBinding) binding;
    unitScope.recordTypeReference(typeBinding);
    if (checkVisibility) // handles the fall through case
        if (!typeBinding.canBeSeenBy(this))
            return new ProblemReferenceBinding(CharOperation.subarray(compoundName, 0, currentIndex),
                    typeBinding, ProblemReasons.NotVisible);

    while (currentIndex < typeNameLength) {
        typeBinding = getMemberType(compoundName[currentIndex++], typeBinding);
        if (!typeBinding.isValidBinding()) {
            if (typeBinding instanceof ProblemReferenceBinding) {
                ProblemReferenceBinding problemBinding = (ProblemReferenceBinding) typeBinding;
                return new ProblemReferenceBinding(CharOperation.subarray(compoundName, 0, currentIndex),
                        problemBinding.closestReferenceMatch(), typeBinding.problemId());
            }
            return new ProblemReferenceBinding(CharOperation.subarray(compoundName, 0, currentIndex),
                    (ReferenceBinding) ((ReferenceBinding) binding).closestMatch(), typeBinding.problemId());
        }
    }
    return typeBinding;
}

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

License:Open Source License

public final Binding getTypeOrPackage(char[][] compoundName) {
    int nameLength = compoundName.length;
    if (nameLength == 1) {
        TypeBinding binding = getBaseType(compoundName[0]);
        if (binding != null)
            return binding;
    }/*  w w  w  .j  a v  a  2s.  c  om*/
    Binding binding = getTypeOrPackage(compoundName[0], Binding.TYPE | Binding.PACKAGE, true);
    if (!binding.isValidBinding())
        return binding;

    int currentIndex = 1;
    boolean checkVisibility = false;
    if (binding instanceof PackageBinding) {
        PackageBinding packageBinding = (PackageBinding) binding;

        while (currentIndex < nameLength) {
            binding = packageBinding.getTypeOrPackage(compoundName[currentIndex++]);
            if (binding == null)
                return new ProblemReferenceBinding(CharOperation.subarray(compoundName, 0, currentIndex), null,
                        ProblemReasons.NotFound);
            if (!binding.isValidBinding())
                return new ProblemReferenceBinding(CharOperation.subarray(compoundName, 0, currentIndex),
                        binding instanceof ReferenceBinding
                                ? (ReferenceBinding) ((ReferenceBinding) binding).closestMatch()
                                : null,
                        binding.problemId());
            if (!(binding instanceof PackageBinding))
                break;
            packageBinding = (PackageBinding) binding;
        }
        if (binding instanceof PackageBinding)
            return binding;
        checkVisibility = true;
    }
    // binding is now a ReferenceBinding
    ReferenceBinding typeBinding = (ReferenceBinding) binding;
    ReferenceBinding qualifiedType = (ReferenceBinding) environment().convertToRawType(typeBinding,
            false /*do not force conversion of enclosing types*/);

    if (checkVisibility) // handles the fall through case
        if (!typeBinding.canBeSeenBy(this))
            return new ProblemReferenceBinding(CharOperation.subarray(compoundName, 0, currentIndex),
                    typeBinding, ProblemReasons.NotVisible);

    while (currentIndex < nameLength) {
        typeBinding = getMemberType(compoundName[currentIndex++], typeBinding);
        // checks visibility
        if (!typeBinding.isValidBinding())
            return new ProblemReferenceBinding(CharOperation.subarray(compoundName, 0, currentIndex),
                    (ReferenceBinding) typeBinding.closestMatch(), typeBinding.problemId());

        if (typeBinding.isGenericType()) {
            qualifiedType = environment().createRawType(typeBinding, qualifiedType);
        } else {
            qualifiedType = (qualifiedType != null
                    && (qualifiedType.isRawType() || qualifiedType.isParameterizedType()))
                            ? environment().createParameterizedType(typeBinding, null, qualifiedType)
                            : typeBinding;
        }
    }
    return qualifiedType;
}