Example usage for org.eclipse.jdt.internal.compiler.lookup LookupEnvironment getCachedType

List of usage examples for org.eclipse.jdt.internal.compiler.lookup LookupEnvironment getCachedType

Introduction

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

Prototype

public ReferenceBinding getCachedType(char[][] compoundName) 

Source Link

Document

Answer the type for the compoundName if it exists in the cache.

Usage

From source file:com.google.gwt.dev.javac.JdtCompiler.java

License:Open Source License

public static ReferenceBinding resolveType(LookupEnvironment lookupEnvironment, String typeName) {
    ReferenceBinding type = null;/*from   w w  w  .  jav a 2  s. c  om*/

    int p = typeName.indexOf('$');
    if (p > 0) {
        // resolve an outer type before trying to get the cached inner
        String cupName = typeName.substring(0, p);
        char[][] chars = CharOperation.splitOn('.', cupName.toCharArray());
        if (lookupEnvironment.getType(chars) != null) {
            // outer class was found
            chars = CharOperation.splitOn('.', typeName.toCharArray());
            type = lookupEnvironment.getCachedType(chars);
            if (type == null) {
                // no inner type; this is a pure failure
                return null;
            }
        }
    } else {
        // just resolve the type straight out
        char[][] chars = CharOperation.splitOn('.', typeName.toCharArray());
        type = lookupEnvironment.getType(chars);
    }

    if (type != null) {
        if (type instanceof UnresolvedReferenceBinding) {
            type = (ReferenceBinding) BinaryTypeBinding.resolveType(type, lookupEnvironment, true);
        }
        // found it
        return type;
    }

    // Assume that the last '.' should be '$' and try again.
    //
    p = typeName.lastIndexOf('.');
    if (p >= 0) {
        typeName = typeName.substring(0, p) + "$" + typeName.substring(p + 1);
        return resolveType(lookupEnvironment, typeName);
    }

    return null;
}

From source file:com.redhat.ceylon.eclipse.core.model.JDTModelLoader.java

License:Open Source License

public static void doOnResolvedGeneratedType(IType typeModel, ActionOnResolvedGeneratedType action) {
    if (typeModel == null || !typeModel.exists()) {
        throw new ModelResolutionException("Resolving action requested on a missing declaration");
    }//from w ww  .  j a v  a2  s  .  co  m

    JDTModelLoader modelLoader = getModelLoader(typeModel);
    if (modelLoader == null) {
        throw new ModelResolutionException("The Model Loader is not available to resolve type '"
                + typeModel.getFullyQualifiedName() + "'");
    }
    char[][] compoundName = CharOperation.splitOn('.', typeModel.getFullyQualifiedName().toCharArray());
    LookupEnvironment lookupEnvironment = modelLoader.createLookupEnvironmentForGeneratedCode();
    ReferenceBinding binding = null;
    IBinaryType binaryType = null;
    try {
        ITypeRoot typeRoot = typeModel.getTypeRoot();

        if (typeRoot instanceof IClassFile) {
            ClassFile classFile = (ClassFile) typeRoot;

            IFile classFileRsrc = (IFile) classFile.getCorrespondingResource();
            if (classFileRsrc != null && !classFileRsrc.exists()) {
                //the .class file has been deleted
                return;
            }

            BinaryTypeBinding binaryTypeBinding = null;
            try {
                binaryType = classFile.getBinaryTypeInfo(classFileRsrc, true);
                binaryTypeBinding = lookupEnvironment.cacheBinaryType(binaryType, null);
            } catch (JavaModelException e) {
                if (!e.isDoesNotExist()) {
                    throw e;
                }
            }

            if (binaryTypeBinding == null) {
                ReferenceBinding existingType = lookupEnvironment.getCachedType(compoundName);
                if (existingType == null || !(existingType instanceof BinaryTypeBinding)) {
                    return;
                }
                binaryTypeBinding = (BinaryTypeBinding) existingType;
            }
            binding = binaryTypeBinding;
        }
    } catch (JavaModelException e) {
        throw new ModelResolutionException(e);
    }
    if (binaryType != null && binding != null) {
        action.doWithBinding(typeModel, binding, binaryType);
    }
}

From source file:com.redhat.ceylon.eclipse.core.model.JDTModelLoader.java

License:Open Source License

private static ReferenceBinding toBinding(IType type, LookupEnvironment theLookupEnvironment,
        char[][] compoundName) throws JavaModelException {
    ITypeRoot typeRoot = type.getTypeRoot();

    if (typeRoot instanceof IClassFile) {
        ClassFile classFile = (ClassFile) typeRoot;

        IFile classFileRsrc = (IFile) classFile.getCorrespondingResource();
        if (classFileRsrc != null && !classFileRsrc.exists()) {
            //the .class file has been deleted
            return null;
        }/* w w w. j  a  v  a  2  s .co m*/

        BinaryTypeBinding binaryTypeBinding = null;
        try {
            IBinaryType binaryType = classFile.getBinaryTypeInfo(classFileRsrc, true);
            binaryTypeBinding = theLookupEnvironment.cacheBinaryType(binaryType, null);
        } catch (JavaModelException e) {
            if (!e.isDoesNotExist()) {
                throw e;
            }
        }

        if (binaryTypeBinding == null) {
            ReferenceBinding existingType = theLookupEnvironment.getCachedType(compoundName);
            if (existingType == null || !(existingType instanceof BinaryTypeBinding)) {
                return null;
            }
            binaryTypeBinding = (BinaryTypeBinding) existingType;
        }
        return binaryTypeBinding;
    } else {
        ReferenceBinding referenceBinding = theLookupEnvironment.getType(compoundName);
        if (referenceBinding != null && !(referenceBinding instanceof BinaryTypeBinding)) {

            if (referenceBinding instanceof ProblemReferenceBinding) {
                ProblemReferenceBinding problemReferenceBinding = (ProblemReferenceBinding) referenceBinding;
                if (problemReferenceBinding.problemId() == ProblemReasons.InternalNameProvided) {
                    referenceBinding = problemReferenceBinding.closestReferenceMatch();
                } else {
                    System.out.println(
                            ProblemReferenceBinding.problemReasonString(problemReferenceBinding.problemId()));
                    return null;
                }
            }
            return referenceBinding;
        }
        return null;
    }
}

From source file:com.redhat.ceylon.eclipse.core.model.loader.JDTModelLoader.java

License:Open Source License

private ClassMirror buildClassMirror(String name) {
    try {//from w  w w.j  a  v a  2s. c  om
        IType type = javaProject.findType(name);
        if (type == null) {
            return null;
        }

        LookupEnvironment theLookupEnvironment = getLookupEnvironment();
        if (type.isBinary()) {
            ClassFile classFile = (ClassFile) type.getClassFile();

            if (classFile != null) {
                IPackageFragmentRoot fragmentRoot = classFile.getPackageFragmentRoot();
                if (fragmentRoot != null) {
                    if (isInCeylonClassesOutputFolder(fragmentRoot.getPath())) {
                        return null;
                    }
                }

                IFile classFileRsrc = (IFile) classFile.getCorrespondingResource();
                IBinaryType binaryType = classFile.getBinaryTypeInfo(classFileRsrc, true);
                if (classFileRsrc != null && !classFileRsrc.exists()) {
                    //the .class file has been deleted
                    return null;
                }
                BinaryTypeBinding binaryTypeBinding = theLookupEnvironment.cacheBinaryType(binaryType, null);
                if (binaryTypeBinding == null) {
                    char[][] compoundName = CharOperation.splitOn('/', binaryType.getName());
                    ReferenceBinding existingType = theLookupEnvironment.getCachedType(compoundName);
                    if (existingType == null || !(existingType instanceof BinaryTypeBinding)) {
                        return null;
                    }
                    binaryTypeBinding = (BinaryTypeBinding) existingType;
                }
                return new JDTClass(binaryTypeBinding, theLookupEnvironment);
            }
        } else {
            char[][] compoundName = CharOperation.splitOn('.', type.getFullyQualifiedName().toCharArray());
            ReferenceBinding referenceBinding = theLookupEnvironment.getType(compoundName);
            if (referenceBinding != null) {
                if (referenceBinding instanceof ProblemReferenceBinding) {
                    ProblemReferenceBinding problemReferenceBinding = (ProblemReferenceBinding) referenceBinding;
                    if (problemReferenceBinding.problemId() == ProblemReasons.InternalNameProvided) {
                        referenceBinding = problemReferenceBinding.closestReferenceMatch();
                    } else {
                        System.out.println(ProblemReferenceBinding
                                .problemReasonString(problemReferenceBinding.problemId()));
                        return null;
                    }
                }
                return new JDTClass(referenceBinding, theLookupEnvironment);
            }
        }
    } catch (JavaModelException e) {
        e.printStackTrace();
    }
    return null;
}