Example usage for org.eclipse.jdt.internal.core ClassFile getCorrespondingResource

List of usage examples for org.eclipse.jdt.internal.core ClassFile getCorrespondingResource

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.core ClassFile getCorrespondingResource.

Prototype

@Override
public IResource getCorrespondingResource() throws JavaModelException 

Source Link

Document

A class file has a corresponding resource unless it is contained in a jar.

Usage

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  w  w.ja v  a 2  s  . c  o  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;
        }//from   w  ww .  j  a  v  a2  s  . c om

        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 {// w  ww .  ja  v  a  2s . co  m
        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;
}