/** * Returns a descriptor for the given class within the given package fragment, or null if the fragment doesn't have * a location on the filesystem. */ private static BinaryModuleDescriptor createDescriptor(PackageFragmentRoot root, ModularClassFile classFile) { IPath location = JavaIndex.getLocationForElement(root); if (location == null) { return null; } String entryName = TypeConstants.MODULE_INFO_CLASS_NAME_STRING; IPath workspacePath = root.getPath(); String indexPath; if (root instanceof JarPackageFragmentRoot) { entryName = ((JarPackageFragmentRoot) root).getClassFilePath(entryName); indexPath = root.getHandleIdentifier() + IDependent.JAR_FILE_ENTRY_SEPARATOR + entryName; // see additional comments in BinaryTypeFactor.createDescriptor() } else { location = location.append(entryName); indexPath = workspacePath.append(entryName).toString(); workspacePath = classFile.resource().getFullPath(); } return new BinaryModuleDescriptor(location.toString().toCharArray(), null, // TODO: module name not know at this point workspacePath.toString().toCharArray(), indexPath.toCharArray()); }
/** * Returns a descriptor for the given class within the given package fragment, or null if the fragment doesn't have * a location on the filesystem. */ private static BinaryModuleDescriptor createDescriptor(PackageFragmentRoot root, ModularClassFile classFile) { IPath location = JavaIndex.getLocationForElement(root); if (location == null) { return null; } String entryName = TypeConstants.MODULE_INFO_CLASS_NAME_STRING; IPath workspacePath = root.getPath(); String indexPath; char[] moduleName = null; if (root instanceof JarPackageFragmentRoot) { entryName = ((JarPackageFragmentRoot) root).getClassFilePath(entryName); indexPath = root.getHandleIdentifier() + IDependent.JAR_FILE_ENTRY_SEPARATOR + entryName; // see additional comments in BinaryTypeFactor.createDescriptor() if (root instanceof JrtPackageFragmentRoot) { moduleName = root.getElementName().toCharArray(); } } else { location = location.append(entryName); indexPath = workspacePath.append(entryName).toString(); workspacePath = classFile.resource().getFullPath(); } return new BinaryModuleDescriptor(location.toString().toCharArray(), moduleName, // TODO: module name only known for JRT workspacePath.toString().toCharArray(), indexPath.toCharArray()); }
entryName = ((JarPackageFragmentRoot) root).getClassFilePath(entryName);
PackageFragment pkg = (PackageFragment) getParent(); JarPackageFragmentRoot jarRoot = (JarPackageFragmentRoot) getPackageFragmentRoot(); String entryName = jarRoot.getClassFilePath(Util.concatWith(pkg.names, getElementName(), '/')); byte[] contents = getClassFileContent(jarRoot, entryName); if (contents != null) {
private IBinaryModule getJarBinaryModuleInfo() throws CoreException, IOException, ClassFormatException { BinaryModuleDescriptor descriptor = BinaryModuleFactory.createDescriptor(this); if (descriptor == null) { return null; } IBinaryModule result = null; IPackageFragmentRoot root = getPackageFragmentRoot(); if (getPackageFragmentRoot() instanceof JarPackageFragmentRoot) { if (root instanceof JrtPackageFragmentRoot || this.name.equals(IModule.MODULE_INFO)) { PackageFragment pkg = (PackageFragment) getParent(); JarPackageFragmentRoot jarRoot = (JarPackageFragmentRoot) getPackageFragmentRoot(); String entryName = jarRoot.getClassFilePath(Util.concatWith(pkg.names, getElementName(), '/')); byte[] contents = getClassFileContent(jarRoot, entryName); if (contents != null) { String fileName = root.getHandleIdentifier() + IDependent.JAR_FILE_ENTRY_SEPARATOR + entryName; ClassFileReader classFileReader = new ClassFileReader(contents, fileName.toCharArray(), false); return classFileReader.getModuleDeclaration(); } } else { result = BinaryModuleFactory.readModule(descriptor, null); } } else { result = BinaryModuleFactory.readModule(descriptor, null); } return result; }
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 {
@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 {
PackageFragment pkg = (PackageFragment) getParent(); JarPackageFragmentRoot jarRoot = (JarPackageFragmentRoot) getPackageFragmentRoot(); String entryName = jarRoot.getClassFilePath(Util.concatWith(pkg.names, getElementName(), '/')); byte[] contents = getClassFileContent(jarRoot, entryName); if (contents != null) {
PackageFragment pkg = (PackageFragment) getParent(); JarPackageFragmentRoot jarRoot = (JarPackageFragmentRoot) getPackageFragmentRoot(); String entryName = jarRoot.getClassFilePath(Util.concatWith(pkg.names, getElementName(), '/')); byte[] contents = getClassFileContent(jarRoot, entryName); if (contents != null) {