private void inspectBundle(IBundle bundle) { for (int i = 0; i < H_TOTAL; i++) { if (fSearchFor == S_FOR_TYPES && (i == H_IMP || i == H_EXP)) continue; IManifestHeader header = bundle.getManifestHeader(SEARCH_HEADERS[i]); if (header != null) { try { ManifestElement[] elements = ManifestElement.parseHeader(header.getName(), header.getValue()); if (elements == null) continue; for (int j = 0; j < elements.length; j++) { String value = null; Matcher matcher = null; if (fSearchFor == S_FOR_TYPES) { value = elements[j].getValue(); matcher = getMatcher(value); } if (value == null || (matcher != null && !matcher.matches())) { value = getProperValue(elements[j].getValue()); matcher = getMatcher(value); } if (matcher.matches()) { String group = matcher.group(0); int[] offlen; offlen = getOffsetOfElement(bundle, header, group); fSearchRequestor.reportMatch( new Match( bundle.getModel().getUnderlyingResource(), Match.UNIT_CHARACTER, offlen[0], offlen[1])); break; // only one package will be listed per header } } } catch (BundleException e) { } } } }
private int[] getOffsetOfElement(IBundle bundle, IManifestHeader header, String value) { int[] offlen = new int[] {0, 0}; IBundleModel model = bundle.getModel(); if (model instanceof IEditingModel) { IDocument pDoc = ((IEditingModel) model).getDocument(); int headerOffset = header.getOffset() + header.getName().length(); try { String headerString = pDoc.get(headerOffset, header.getLength() - header.getName().length()); int internalOffset = headerString.indexOf(value); if (internalOffset != -1) offlen[0] = headerOffset + internalOffset; else offlen[0] = headerOffset + header.getName().length() + header.getValue().indexOf(value); offlen[1] = value.length(); } catch (BadLocationException e) { } } return offlen; }