Example usage for org.eclipse.jdt.core.util IClassFileReader getClassName

List of usage examples for org.eclipse.jdt.core.util IClassFileReader getClassName

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.util IClassFileReader getClassName.

Prototype

char[] getClassName();

Source Link

Document

Answer back the qualified name of the .class file.

Usage

From source file:com.redhat.ceylon.eclipse.code.wizard.ClassPathDetector.java

License:Open Source License

private IPath detectOutputFolder() throws CoreException {
    HashSet<IPath> classFolders = new HashSet<IPath>();

    for (Iterator<IResource> iter = fClassFiles.iterator(); iter.hasNext();) {
        IFile file = (IFile) iter.next();
        IClassFileReader reader = null;
        InputStream content = null;
        try {// w  ww  .ja v  a2  s  .  co m
            content = file.getContents();
            reader = ToolFactory.createDefaultClassFileReader(content, IClassFileReader.CLASSFILE_ATTRIBUTES);
        } finally {
            try {
                if (content != null)
                    content.close();
            } catch (IOException e) {
                throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR,
                        Messages.format("error closing file",
                                BasicElementLabels.getPathLabel(file.getFullPath(), false)),
                        e));
            }
        }
        if (reader == null) {
            continue; // problematic class file
        }
        char[] className = reader.getClassName();
        ISourceAttribute sourceAttribute = reader.getSourceFileAttribute();
        if (className != null && sourceAttribute != null && sourceAttribute.getSourceFileName() != null) {
            IPath packPath = file.getParent().getFullPath();
            int idx = CharOperation.lastIndexOf('/', className) + 1;
            IPath relPath = new Path(new String(className, 0, idx));
            IPath cuPath = relPath.append(new String(sourceAttribute.getSourceFileName()));

            IPath resPath = null;
            if (idx == 0) {
                resPath = packPath;
            } else {
                IPath folderPath = getFolderPath(packPath, relPath);
                if (folderPath != null) {
                    resPath = folderPath;
                }
            }
            if (resPath != null) {
                IPath path = findInSourceFolders(cuPath);
                if (path != null) {
                    return resPath;
                } else {
                    classFolders.add(resPath);
                }
            }
        }
    }
    IPath projPath = fProject.getFullPath();
    if (fSourceFolders.size() == 1 && classFolders.isEmpty() && fSourceFolders.get(projPath) != null) {
        return projPath;
    } else {
        IPath path = projPath
                .append(PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_BINNAME));
        while (classFolders.contains(path)) {
            path = new Path(path.toString() + '1');
        }
        return path;
    }
}

From source file:in.software.analytics.parichayana.core.internal.builder.ParichayanaBuilder.java

License:Open Source License

/**
 * @param delta//from  www . j av  a  2  s.c o  m
 * @param monitor
 * @throws CoreException 
 */
private void buildDelta(IResourceDelta delta, IProgressMonitor monitor) throws CoreException {
    final List<ICompilationUnit> units = new ArrayList<ICompilationUnit>();
    delta.accept(new IResourceDeltaVisitor() {

        @Override
        public boolean visit(IResourceDelta delta) throws CoreException {
            IResource res = delta.getResource();
            switch (res.getType()) {
            case IResource.ROOT:
                return true;
            case IResource.PROJECT:
                return true;
            case IResource.FOLDER:
                return true;
            case IResource.FILE:
                IJavaElement element = JavaCore.create(res);
                ICompilationUnit cu = null;
                if (element instanceof IClassFile) {
                    cu = getCompilationUnit((IClassFile) element);
                }
                if (element instanceof ICompilationUnit) {
                    cu = (ICompilationUnit) element;
                }
                if (cu != null) {
                    cleanupMarkers(cu.getUnderlyingResource());
                    if (units.contains(cu)) {
                        return false;
                    }
                    units.add(cu);
                }
                return false;
            default:
                return false;
            }
        }

        public ICompilationUnit getCompilationUnit(IClassFile classFile) {
            IClassFileReader classFileReader = ToolFactory.createDefaultClassFileReader(classFile,
                    IClassFileReader.CLASSFILE_ATTRIBUTES);
            if (classFileReader != null) {
                char[] className = classFileReader.getClassName();
                if (className != null) {
                    String fqn = new String(classFileReader.getClassName()).replace("/", "."); //$NON-NLS-1$ //$NON-NLS-2$
                    IJavaProject javaProject = classFile.getJavaProject();
                    IType sourceType = null;
                    try {
                        sourceType = javaProject.findType(fqn);
                        if (sourceType != null) {
                            return sourceType.getCompilationUnit();
                        }
                    } catch (JavaModelException e) {
                        // ignore
                    }
                }
            }
            return null;
        }
    });
    build(units, monitor);
}

From source file:nz.ac.massey.cs.jquest.views.QueryView.java

License:Open Source License

private String getFullname(IJavaElement e) {
    String fullname = null;//from w ww.  ja  v a2s.com
    try {
        if (e instanceof ICompilationUnit) {
            fullname = ".fullname=='" + ((ICompilationUnit) e).getTypes()[0].getFullyQualifiedName() + "'";
            return fullname;
        } else if (e instanceof IClassFile) {
            IClassFile icf = (IClassFile) e;
            IClassFileReader r = new ClassFileReader(icf.getBytes(), IClassFileReader.ALL);
            char[] name = r.getClassName();
            String classname = String.valueOf(name);
            classname = classname.replace("/", ".");
            fullname = ".fullname=='" + classname + "'";
            return fullname;
        } else if (e instanceof IPackageFragment) {
            fullname = ".namespace=='" + e.getElementName() + "'";
            return fullname;
        } else if (e instanceof IPackageFragmentRoot) {
            fullname = ".container=='" + e.getElementName() + "'";
            return fullname;
        } else {
            return null;
        }
    } catch (Exception e1) {
        e1.printStackTrace();
    }

    return null;
}

From source file:org.eclipse.acceleo.common.internal.utils.workspace.AcceleoDeltaVisitor.java

License:Open Source License

/**
 * {@inheritDoc}//from   w  ww  . j  av  a 2  s .co  m
 * 
 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
 */
public boolean visit(IResourceDelta delta) throws CoreException {
    if (delta == null || 0 == (delta.getKind() & IResourceDelta.CHANGED)) {
        return false;
    }
    boolean visit = false;
    IResource resource = delta.getResource();
    if (resource != null) {
        switch (resource.getType()) {
        case IResource.FILE:
            if (0 == (delta.getFlags() & IResourceDelta.CONTENT)) {
                break;
            }
            if ("class".equals(resource.getFullPath().getFileExtension())) { //$NON-NLS-1$
                final IClassFileReader reader = ToolFactory.createDefaultClassFileReader(
                        resource.getLocation().toOSString(), IClassFileReader.CLASSFILE_ATTRIBUTES);
                changedClasses.add(new String(reader.getClassName()).replace("/", ".")); //$NON-NLS-1$ //$NON-NLS-2$
            }
            break;
        case IResource.PROJECT:
            changedProjects.add((IProject) resource);
            visit = true;
            break;
        default:
            visit = true;
        }
    }
    return visit;
}

From source file:org.eclipse.ajdt.internal.ui.editor.quickfix.AJSerialVersionHashOperation.java

License:Open Source License

private static Long calculateSerialVersionId(IClassFileReader cfReader) throws IOException {
    // implementing algorithm specified on http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/class.html#4100

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    DataOutputStream doos = new DataOutputStream(os);
    doos.writeUTF(getClassName(cfReader.getClassName())); // class name
    int mod = getClassModifiers(cfReader);
    //      System.out.println(Integer.toHexString(mod) + ' ' + Flags.toString(mod));

    int classModifiers = mod & (Flags.AccPublic | Flags.AccFinal | Flags.AccInterface | Flags.AccAbstract);

    doos.writeInt(classModifiers); // class modifiers
    char[][] interfaces = getSortedInterfacesNames(cfReader);
    for (int i = 0; i < interfaces.length; i++) {
        doos.writeUTF(getClassName(interfaces[i]));
    }//from  ww w.  j a v a2s  .com
    IFieldInfo[] sortedFields = getSortedFields(cfReader);
    for (int i = 0; i < sortedFields.length; i++) {
        IFieldInfo curr = sortedFields[i];
        int flags = curr.getAccessFlags();
        if (!Flags.isPrivate(flags) || (!Flags.isStatic(flags) && !Flags.isTransient(flags))) {
            doos.writeUTF(new String(curr.getName()));
            doos.writeInt(flags & (Flags.AccPublic | Flags.AccPrivate | Flags.AccProtected | Flags.AccStatic
                    | Flags.AccFinal | Flags.AccVolatile | Flags.AccTransient)); // field modifiers
            doos.writeUTF(new String(curr.getDescriptor()));
        }
    }
    if (hasStaticClassInitializer(cfReader)) {
        doos.writeUTF(STATIC_CLASS_INITIALIZER);
        doos.writeInt(Flags.AccStatic);
        doos.writeUTF("()V"); //$NON-NLS-1$
    }
    IMethodInfo[] sortedMethods = getSortedMethods(cfReader);
    for (int i = 0; i < sortedMethods.length; i++) {
        IMethodInfo curr = sortedMethods[i];
        int flags = curr.getAccessFlags();
        if (!Flags.isPrivate(flags) && !curr.isClinit()) {
            doos.writeUTF(new String(curr.getName()));
            doos.writeInt(flags & (Flags.AccPublic | Flags.AccPrivate | Flags.AccProtected | Flags.AccStatic
                    | Flags.AccFinal | Flags.AccSynchronized | Flags.AccNative | Flags.AccAbstract
                    | Flags.AccStrictfp)); // method modifiers
            doos.writeUTF(getClassName(curr.getDescriptor()));
        }
    }
    doos.flush();
    return computeHash(os.toByteArray());
}

From source file:org.eclipse.ajdt.internal.ui.editor.quickfix.AJSerialVersionHashOperation.java

License:Open Source License

private static int getClassModifiers(IClassFileReader cfReader) {
    IInnerClassesAttribute innerClassesAttribute = cfReader.getInnerClassesAttribute();
    if (innerClassesAttribute != null) {
        IInnerClassesAttributeEntry[] entries = innerClassesAttribute.getInnerClassAttributesEntries();
        for (int i = 0; i < entries.length; i++) {
            IInnerClassesAttributeEntry entry = entries[i];
            char[] innerClassName = entry.getInnerClassName();
            if (innerClassName != null) {
                if (CharOperation.equals(cfReader.getClassName(), innerClassName)) {
                    return entry.getAccessFlags();
                }/*from  w w  w .ja v a  2  s. c om*/
            }
        }
    }
    return cfReader.getAccessFlags();
}

From source file:org.eclipse.pde.tools.internal.versioning.JavaClassVersionCompare.java

License:Open Source License

public int checkJavaClassVersions(MultiStatus status, Object javaClassObj1, Object javaClassObj2,
        IProgressMonitor monitor) throws CoreException {
    try {//from  w  w w.  ja  v  a2 s. co  m
        monitor = VersioningProgressMonitorWrapper.monitorFor(monitor);
        monitor.beginTask(Messages.JavaClassVersionCompare_comparingClassMsg, 100);
        finalResult = status;
        // get IClassFileReader instances of javaClassObj1 and javaClassObj2
        IClassFileReader classFileReader1 = ClassFileHelper.getReader(javaClassObj1);
        if (classFileReader1 == null) {
            if (javaClassObj1 instanceof InputStream)
                finalResult.merge(resultStatusHandler(IStatus.ERROR,
                        IVersionCompare.PROCESS_ERROR_STATUS | IVersionCompare.ERROR_OCCURRED,
                        Messages.JavaClassVersionCompare_inputStreamErrMsg, null));
            else
                finalResult.merge(resultStatusHandler(IStatus.ERROR,
                        IVersionCompare.PROCESS_ERROR_STATUS | IVersionCompare.ERROR_OCCURRED,
                        NLS.bind(Messages.JavaClassVersionCompare_classFileNotLoadedMsg, javaClassObj1), null));
            return IVersionCompare.ERROR_OCCURRED;
        }
        IClassFileReader classFileReader2 = ClassFileHelper.getReader(javaClassObj2);
        // worked 5%
        monitor.worked(5);
        if (monitor.isCanceled())
            throw new OperationCanceledException();
        if (classFileReader2 == null) {
            if (javaClassObj2 instanceof InputStream)
                finalResult.merge(resultStatusHandler(IStatus.ERROR,
                        IVersionCompare.PROCESS_ERROR_STATUS | IVersionCompare.ERROR_OCCURRED,
                        Messages.JavaClassVersionCompare_inputStreamErrMsg, null));
            else
                finalResult.merge(resultStatusHandler(IStatus.ERROR,
                        IVersionCompare.PROCESS_ERROR_STATUS | IVersionCompare.ERROR_OCCURRED,
                        NLS.bind(Messages.JavaClassVersionCompare_classFileNotLoadedMsg, javaClassObj2), null));
            return IVersionCompare.ERROR_OCCURRED;
        }
        // worked 5%
        monitor.worked(5);
        if (monitor.isCanceled())
            throw new OperationCanceledException();
        // initialize flags
        hasError = false;
        hasMajorChange = false;
        hasMinorChange = false;
        hasMicroChange = false;
        // compare two classes ( 90% workload)
        compareJavaClasses(classFileReader1, classFileReader2, new SubProgressMonitor(monitor, 90));
        // analysis result
        if (hasError) {
            finalResult.merge(resultStatusHandler(IStatus.ERROR,
                    IVersionCompare.CLASS_OVERALL_STATUS | IVersionCompare.ERROR_OCCURRED,
                    NLS.bind(Messages.JavaClassVersionCompare_classErrorOccurredMsg,
                            charsToString(classFileReader1.getClassName())),
                    null));
            return IVersionCompare.ERROR_OCCURRED;
        }
        if (hasMajorChange) {
            finalResult.merge(resultStatusHandler(IStatus.INFO, IVersionCompare.CLASS_OVERALL_STATUS,
                    NLS.bind(Messages.JavaClassVersionCompare_classMajorChangeMsg,
                            charsToString(classFileReader1.getClassName())),
                    null));
            return IVersionCompare.MAJOR_CHANGE;
        }
        if (hasMinorChange) {
            finalResult.merge(resultStatusHandler(IStatus.INFO, IVersionCompare.CLASS_OVERALL_STATUS,
                    NLS.bind(Messages.JavaClassVersionCompare_classMinorChangeMsg,
                            charsToString(classFileReader1.getClassName())),
                    null));
            return IVersionCompare.MINOR_CHANGE;
        }
        if (hasMicroChange) {
            finalResult.merge(resultStatusHandler(IStatus.INFO, IVersionCompare.CLASS_OVERALL_STATUS,
                    NLS.bind(Messages.JavaClassVersionCompare_classMicroChange,
                            charsToString(classFileReader1.getClassName())),
                    null));
            return IVersionCompare.MICRO_CHANGE;
        }
        return IVersionCompare.NO_CHANGE;
    } finally {
        monitor.done();
    }
}

From source file:org.eclipse.pde.tools.internal.versioning.JavaClassVersionCompare.java

License:Open Source License

/**
 * compares two java classes denoted by <code>classFileReader1</code> and <code>classFileReader2</code>,
 * and check if there is any change from <code>classFileReader2</code> to <code>classFileReader1</code>.
 * //w  w w. j  av  a2  s.  c o m
 * @param classFileReader1
 * @param classFileReader2
 * @param monitor IProgressMonitor instance
 * @return compare result IStatus instance
 */
private IStatus compareJavaClasses(IClassFileReader classFileReader1, IClassFileReader classFileReader2,
        IProgressMonitor monitor) {
    try {
        monitor.beginTask("", 100); //$NON-NLS-1$
        // compare class names
        String name1 = charsToString(classFileReader1.getClassName());
        String name2 = charsToString(classFileReader2.getClassName());
        if (!name1.equals(name2)) {
            finalResult.merge(resultStatusHandler(IStatus.WARNING, IVersionCompare.PROCESS_ERROR_STATUS,
                    NLS.bind(Messages.JavaClassVersionCompare_differentClassNameMsg, name1, name2), null));
            return finalResult;
        }
        // worked 5%
        monitor.worked(5);
        // compare super classes
        checkSuperClasses(name1, classFileReader1.getSuperclassName(), classFileReader2.getSuperclassName());
        // worked 5%
        monitor.worked(5);
        // compare interfaces
        checkInterfaces(name1, generateList(classFileReader1.getInterfaceNames()),
                generateList(classFileReader2.getInterfaceNames()));
        // worked 5%
        monitor.worked(5);
        // compare modifier of classes
        checkClassModifiers(name1, classFileReader1.getAccessFlags(), classFileReader2.getAccessFlags());
        // worked 5%
        monitor.worked(5);
        // compare fields
        checkElements(name1, generateTable(classFileReader1.getFieldInfos()),
                generateTable(classFileReader2.getFieldInfos()));
        // worked 40%
        monitor.worked(40);
        // compare methods (40%)
        checkElements(name1, generateTable(classFileReader1.getMethodInfos()),
                generateTable(classFileReader2.getMethodInfos()));
        return finalResult;
    } finally {
        monitor.done();
    }
}

From source file:org.eclipse.pde.tools.internal.versioning.PluginVersionCompare.java

License:Open Source License

/**
 * compares IClassFileReader instances in <code>list1</code> to the corresponding one
 * in <code>list2</code>// w  w  w  . j  ava2  s.c  o  m
 * @param list1 contains IClassFileReader instances
 * @param list2 contains IClassFileReader instances
 * @param monitor IProgressMonitor instance
 */
private void compareClasses(List list1, List list2, IProgressMonitor monitor) {
    try {
        monitor.beginTask("", list1.size() + 1); //$NON-NLS-1$
        for (Iterator classIterator1 = list1.iterator(); classIterator1.hasNext();) {
            if (monitor.isCanceled())
                throw new OperationCanceledException();
            IClassFileReader classFileReader1 = (IClassFileReader) classIterator1.next();
            String className1 = charsToString(classFileReader1.getClassName());
            Iterator classIterator2;
            boolean beCompared = false;
            for (classIterator2 = list2.iterator(); classIterator2.hasNext();) {
                IClassFileReader classFileReader2 = (IClassFileReader) classIterator2.next();
                if (className1.equals(charsToString(classFileReader2.getClassName()))) {
                    // compare two IClassFileReader instances and merge the result into finalResult
                    try {
                        processed(classCompare.checkJavaClassVersions(finalResult, classFileReader1,
                                classFileReader2, new SubProgressMonitor(monitor, 1)));
                    } catch (CoreException ce) {
                        finalResult.merge(resultStatusHandler(IStatus.ERROR,
                                IVersionCompare.PROCESS_ERROR_STATUS | IVersionCompare.ERROR_OCCURRED,
                                NLS.bind(Messages.PluginVersionCompare_errorWhenCompareClassesMsg,
                                        charsToString(classFileReader1.getClassName())),
                                null));
                    }
                    list2.remove(classFileReader2);
                    beCompared = true;
                    break;
                }
            }
            if (!beCompared && shouldProcess(classFileReader1)) {
                // new added class
                finalResult.merge(resultStatusHandler(IStatus.INFO,
                        IVersionCompare.PLUGIN_DETAIL_STATUS | IVersionCompare.MINOR_CHANGE,
                        NLS.bind(Messages.PluginVersionCompare_destinationClassNotFoundMsg,
                                charsToString(classFileReader1.getClassName())),
                        null));
            }
        }
        // no longer exist classes
        for (Iterator iterator2 = list2.iterator(); iterator2.hasNext();) {
            IClassFileReader classFileReader = (IClassFileReader) iterator2.next();
            if (shouldProcess(classFileReader))
                finalResult.merge(resultStatusHandler(IStatus.INFO,
                        IVersionCompare.PLUGIN_DETAIL_STATUS | IVersionCompare.MAJOR_CHANGE,
                        NLS.bind(Messages.PluginVersionCompare_sourceClassNotFoundMsg,
                                charsToString(classFileReader.getClassName())),
                        null));
        }
        monitor.worked(1);
    } finally {
        monitor.done();
    }
}

From source file:org.eclipse.pde.tools.internal.versioning.PluginVersionCompare.java

License:Open Source License

/**
 * process classes indicated by URL instances in <code>classArray</code> depending on <code>flag</code>
 * if <code>flag</code> is NEW_CLASS, all the IClassFileReader instances in <code>classArray</code> are new added classes
 * if <code>flag</code> is DELETED_CLASS, all the IClassFileReader instances in <code>classArray</code> are classes no longer exist
 * @param classArray contains URL instances
 * @param flag could be NEW_CLASS or DELETED_CLASS
 *///  ww  w.java2 s .  co  m
private void processChangedClasses(Object[] classArray, int flag) {
    if (classArray.length == 0)
        return;
    for (int i = 0; i < classArray.length; i++) {
        if (!(classArray[i] instanceof URL))
            continue;
        try {
            IClassFileReader classFileReader = ClassFileHelper.getReader(classArray[i]);
            if (classFileReader == null) {
                finalResult.merge(resultStatusHandler(IStatus.ERROR,
                        IVersionCompare.PROCESS_ERROR_STATUS | IVersionCompare.ERROR_OCCURRED,
                        NLS.bind(Messages.PluginVersionCompare_couldNotReadClassMsg,
                                ((URL) classArray[i]).getFile()),
                        null));
                continue;
            }
            if (shouldProcess(classFileReader) && shouldProcess(charsToString(classFileReader.getClassName())))
                if (flag == NEW_CLASS)
                    // new added class
                    finalResult.merge(resultStatusHandler(IStatus.INFO,
                            IVersionCompare.CLASS_OVERALL_STATUS | IVersionCompare.MINOR_CHANGE,
                            NLS.bind(Messages.PluginVersionCompare_destinationClassNotFoundMsg,
                                    charsToString(classFileReader.getClassName())),
                            null));
                else if (flag == DELETED_CLASS)
                    // deleted class
                    finalResult.merge(resultStatusHandler(IStatus.INFO,
                            IVersionCompare.CLASS_OVERALL_STATUS | IVersionCompare.MAJOR_CHANGE,
                            NLS.bind(Messages.PluginVersionCompare_sourceClassNotFoundMsg,
                                    charsToString(classFileReader.getClassName())),
                            null));
        } catch (CoreException e) {
            finalResult.merge(resultStatusHandler(IStatus.ERROR,
                    IVersionCompare.PROCESS_ERROR_STATUS | IVersionCompare.ERROR_OCCURRED,
                    NLS.bind(Messages.PluginVersionCompare_couldNotReadClassMsg,
                            ((URL) classArray[i]).getFile()),
                    e));
        }
    }
}