public void codeComplete(int offset, CompletionRequestor requestor, IProgressMonitor monitor) throws JavaModelException { codeComplete(offset, requestor, DefaultWorkingCopyOwner.PRIMARY, monitor); } /* (non-Javadoc)
@Override public abstract IJavaElement[] codeSelect(int offset, int length, WorkingCopyOwner owner) throws JavaModelException;
/** * @see ISourceReference */ public String getSource() throws JavaModelException { IBuffer buffer = getBuffer(); if (buffer == null) { return null; } return buffer.getContents(); } /**
public byte[] getBytes() throws JavaModelException { JavaElement pkg = (JavaElement) getParent(); if (pkg instanceof JarPackageFragment) { JarPackageFragmentRoot root = (JarPackageFragmentRoot) pkg.getParent(); try { String entryName = Util.concatWith(((PackageFragment) pkg).names, getElementName(), '/'); entryName = root.getClassFilePath(entryName); return getClassFileContent(root, entryName); // Java 9 - The below exception is not thrown in new scheme of things. Could cause issues? // throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this)); } catch (IOException ioe) { throw new JavaModelException(ioe, IJavaModelStatusConstants.IO_EXCEPTION); } catch (CoreException e) { if (e instanceof JavaModelException) { throw (JavaModelException)e; } else { throw new JavaModelException(e); } } } else { IFile file = (IFile) resource(); return Util.getResourceContentsAsByteArray(file); } } protected byte[] getClassFileContent(JarPackageFragmentRoot root, String className) throws CoreException, IOException {
private IStatus validateClassFile() { IPackageFragmentRoot root = getPackageFragmentRoot(); try { if (root.getKind() != IPackageFragmentRoot.K_BINARY) return new JavaModelStatus(IJavaModelStatusConstants.INVALID_ELEMENT_TYPES, root); } catch (JavaModelException e) { return e.getJavaModelStatus(); } IJavaProject project = getJavaProject(); return JavaConventions.validateClassFileName(getElementName(), project.getOption(JavaCore.COMPILER_SOURCE, true), project.getOption(JavaCore.COMPILER_COMPLIANCE, true)); }
@Override public IPath getPath() { PackageFragmentRoot root = getPackageFragmentRoot(); if (root.isArchive()) { return root.getPath(); } else { return getParent().getPath().append(getElementName()); } }
@Override protected IStatus validateExistence(IResource underlyingResource) { // check whether the class file can be opened IStatus status = validateClassFile(); if (!status.isOK()) return status; if (underlyingResource != null) { if (!underlyingResource.isAccessible()) return newDoesNotExistStatus(); PackageFragmentRoot root; if ((underlyingResource instanceof IFolder) && (root = getPackageFragmentRoot()).isArchive()) { // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=204652 return root.newDoesNotExistStatus(); } } return JavaModelStatus.VERIFIED_OK; }
/** * A class file has a corresponding resource unless it is contained * in a jar. * * @see IJavaElement */ @Override public IResource getCorrespondingResource() throws JavaModelException { IPackageFragmentRoot root= (IPackageFragmentRoot)getParent().getParent(); if (root.isArchive()) { return null; } else { return getUnderlyingResource(); } } public IJavaElement getElementAtConsideringSibling(int position) throws JavaModelException {
public IJavaElement getElementAtConsideringSibling(int position) throws JavaModelException { IPackageFragment fragment = (IPackageFragment)getParent(); PackageFragmentRoot root = (PackageFragmentRoot) fragment.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT); SourceMapper mapper = root.getSourceMapper(); return findElement(type, position, mapper);
void closeAndRemoveFromJarTypeCache() throws JavaModelException { super.close(); // triggered when external annotations have changed we need to recreate this class file JavaModelManager.getJavaModelManager().removeFromJarTypeCache(this.binaryType); } @Override
@Override protected void toStringName(StringBuffer buffer) { buffer.append(this.classFile.getElementName()); }
public ClassFileWorkingCopy(AbstractClassFile classFile, WorkingCopyOwner owner) { super((PackageFragment) classFile.getParent(), sourceFileName(classFile), owner); this.classFile = classFile; } private static String sourceFileName(AbstractClassFile classFile) {
/** * Finds the deepest <code>IJavaElement</code> in the hierarchy of * <code>elt</elt>'s children (including <code>elt</code> itself) * which has a source range that encloses <code>position</code> * according to <code>mapper</code>. */ protected IJavaElement findElement(IJavaElement elt, int position, SourceMapper mapper) { SourceRange range = mapper.getSourceRange(elt); if (range == null || position < range.getOffset() || range.getOffset() + range.getLength() - 1 < position) { return null; } if (elt instanceof IParent) { try { IJavaElement[] children = ((IParent) elt).getChildren(); for (int i = 0; i < children.length; i++) { IJavaElement match = findElement(children[i], position, mapper); if (match != null) { return match; } } } catch (JavaModelException npe) { // elt doesn't exist: return the element } } return elt; }
@Override public byte[] getBytes() throws JavaModelException { JavaElement pkg = (JavaElement) getParent(); if (pkg instanceof JarPackageFragment) { JarPackageFragmentRoot root = (JarPackageFragmentRoot) pkg.getParent(); try { String entryName = Util.concatWith(((PackageFragment) pkg).names, getElementName(), '/'); entryName = root.getClassFilePath(entryName); return getClassFileContent(root, entryName); // Java 9 - The below exception is not thrown in new scheme of things. Could cause issues? // throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST, this)); } catch (IOException ioe) { throw new JavaModelException(ioe, IJavaModelStatusConstants.IO_EXCEPTION); } catch (CoreException e) { if (e instanceof JavaModelException) { throw (JavaModelException)e; } else { throw new JavaModelException(e); } } } else { IFile file = (IFile) resource(); return Util.getResourceContentsAsByteArray(file); } } protected byte[] getClassFileContent(JarPackageFragmentRoot root, String className) throws CoreException, IOException {
private IStatus validateClassFile() { IPackageFragmentRoot root = getPackageFragmentRoot(); try { if (root.getKind() != IPackageFragmentRoot.K_BINARY) return new JavaModelStatus(IJavaModelStatusConstants.INVALID_ELEMENT_TYPES, root); } catch (JavaModelException e) { return e.getJavaModelStatus(); } IJavaProject project = getJavaProject(); return JavaConventions.validateClassFileName(getElementName(), project.getOption(JavaCore.COMPILER_SOURCE, true), project.getOption(JavaCore.COMPILER_COMPLIANCE, true)); }
public IPath getPath() { PackageFragmentRoot root = getPackageFragmentRoot(); if (root.isArchive()) { return root.getPath(); } else { return getParent().getPath().append(getElementName()); } }
@Override protected IStatus validateExistence(IResource underlyingResource) { // check whether the class file can be opened IStatus status = validateClassFile(); if (!status.isOK()) return status; if (underlyingResource != null) { if (!underlyingResource.isAccessible()) return newDoesNotExistStatus(); PackageFragmentRoot root; if ((underlyingResource instanceof IFolder) && (root = getPackageFragmentRoot()).isArchive()) { // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=204652 return root.newDoesNotExistStatus(); } } return JavaModelStatus.VERIFIED_OK; }
/** * A class file has a corresponding resource unless it is contained * in a jar. * * @see IJavaElement */ @Override public IResource getCorrespondingResource() throws JavaModelException { IPackageFragmentRoot root= (IPackageFragmentRoot)getParent().getParent(); if (root.isArchive()) { return null; } else { return getUnderlyingResource(); } } public IJavaElement getElementAtConsideringSibling(int position) throws JavaModelException {
public IJavaElement getElementAtConsideringSibling(int position) throws JavaModelException { IPackageFragment fragment = (IPackageFragment)getParent(); PackageFragmentRoot root = (PackageFragmentRoot) fragment.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT); SourceMapper mapper = root.getSourceMapper(); return findElement(type, position, mapper);
void closeAndRemoveFromJarTypeCache() throws JavaModelException { super.close(); // triggered when external annotations have changed we need to recreate this class file JavaModelManager.getJavaModelManager().removeFromJarTypeCache(this.binaryType); } @Override