View | Details | Raw Unified | Return to bug 148243
Collapse All | Expand All

(-)search/org/eclipse/jdt/internal/core/search/JavaSearchDocument.java (-1 / +10 lines)
Lines 27-39 Link Here
27
	private IFile file;
27
	private IFile file;
28
	protected byte[] byteContents;
28
	protected byte[] byteContents;
29
	protected char[] charContents;
29
	protected char[] charContents;
30
	private boolean firstLevel = false;
30
	
31
	
31
	public JavaSearchDocument(String documentPath, SearchParticipant participant) {
32
	public JavaSearchDocument(String documentPath, SearchParticipant participant) {
32
		super(documentPath, participant);
33
		super(documentPath, participant);
33
	}
34
	}
34
	public JavaSearchDocument(java.util.zip.ZipEntry zipEntry, IPath zipFilePath, byte[] contents, SearchParticipant participant) {
35
	public JavaSearchDocument(java.util.zip.ZipEntry zipEntry, IPath zipFilePath, byte[] contents, SearchParticipant participant, boolean firstLevel) {
35
		super(zipFilePath + IJavaSearchScope.JAR_FILE_ENTRY_SEPARATOR + zipEntry.getName(), participant);
36
		super(zipFilePath + IJavaSearchScope.JAR_FILE_ENTRY_SEPARATOR + zipEntry.getName(), participant);
36
		this.byteContents = contents;
37
		this.byteContents = contents;
38
		this.firstLevel = firstLevel;
37
	}
39
	}
38
40
39
	public byte[] getByteContents() {
41
	public byte[] getByteContents() {
Lines 80-85 Link Here
80
			this.file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(getPath()));
82
			this.file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(getPath()));
81
		return this.file;
83
		return this.file;
82
	}
84
	}
85
86
	/**
87
	 * @return the nestedLevel
88
	 */
89
	public boolean getFirstLevel() {
90
		return this.firstLevel;
91
	}
83
	public String toString() {
92
	public String toString() {
84
		return "SearchDocument for " + getPath(); //$NON-NLS-1$
93
		return "SearchDocument for " + getPath(); //$NON-NLS-1$
85
	}
94
	}
(-)search/org/eclipse/jdt/internal/core/search/indexing/AddJarFileToIndex.java (-8 / +37 lines)
Lines 13-19 Link Here
13
import java.io.File;
13
import java.io.File;
14
import java.io.IOException;
14
import java.io.IOException;
15
import java.net.URI;
15
import java.net.URI;
16
import java.util.Enumeration;
16
import java.util.*;
17
import java.util.zip.ZipEntry;
17
import java.util.zip.ZipEntry;
18
import java.util.zip.ZipFile;
18
import java.util.zip.ZipFile;
19
19
Lines 182-201 Link Here
182
					return false;
182
					return false;
183
				}
183
				}
184
184
185
				ArrayList entries = new ArrayList(zip.size());
185
				for (Enumeration e = zip.entries(); e.hasMoreElements();) {
186
				for (Enumeration e = zip.entries(); e.hasMoreElements();) {
187
					ZipEntry ze = (ZipEntry) e.nextElement();
188
					if (Util.isClassFileName(ze.getName())) {
189
						entries.add(ze);
190
					}
191
				}
192
				Collections.sort(entries, new Comparator() {
193
					public int compare(Object o1, Object o2) {
194
						String n1 = ((ZipEntry)o1).getName();
195
						String n2 = ((ZipEntry)o2).getName();
196
						return n2.compareTo(n1);
197
					}
198
				});
199
				for (int i=0, size=entries.size(); i<size; i++) {
186
					if (this.isCancelled) {
200
					if (this.isCancelled) {
187
						if (JobManager.VERBOSE)
201
						if (JobManager.VERBOSE)
188
							org.eclipse.jdt.internal.core.util.Util.verbose("-> indexing of " + zip.getName() + " has been cancelled"); //$NON-NLS-1$ //$NON-NLS-2$
202
							org.eclipse.jdt.internal.core.util.Util.verbose("-> indexing of " + zip.getName() + " has been cancelled"); //$NON-NLS-1$ //$NON-NLS-2$
189
						return false;
203
						return false;
190
					}
204
					}
191
205
					
192
					// iterate each entry to index it
206
					// Compute entry nested level
193
					ZipEntry ze = (ZipEntry) e.nextElement();
207
					ZipEntry ze = (ZipEntry) entries.get(i);
194
					if (Util.isClassFileName(ze.getName())) {
208
					String entryClassName = ze.getName();
195
						final byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getZipEntryByteContent(ze, zip);
209
					String entryName = entryClassName.substring(0, entryClassName.length()-6); // remove extension '.class'
196
						JavaSearchDocument entryDocument = new JavaSearchDocument(ze, zipFilePath, classFileBytes, participant);
210
					boolean firstLevel = true;
197
						this.manager.indexDocument(entryDocument, participant, index, this.containerPath);
211
					int idx = entryClassName.lastIndexOf('$');
212
					if (idx > 0 && i >= 2) {
213
						// try to find enclosing type in previous Zip entries
214
						String previousName = ((ZipEntry) entries.get(i-1)).getName();
215
						if (entryName.regionMatches(0, previousName, 0, previousName.length()-6)) {
216
							idx = entryName.lastIndexOf('$', idx-1);
217
							if (idx > 0) {
218
								previousName = ((ZipEntry) entries.get(i-2)).getName();
219
								firstLevel = !entryName.regionMatches(0, previousName, 0, previousName.length()-6);
220
							}
221
						}
198
					}
222
					}
223
224
					// Index entry
225
					final byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getZipEntryByteContent(ze, zip);
226
					JavaSearchDocument entryDocument = new JavaSearchDocument(ze, zipFilePath, classFileBytes, participant, firstLevel);
227
					this.manager.indexDocument(entryDocument, participant, index, this.containerPath);
199
				}
228
				}
200
				this.manager.saveIndex(index);
229
				this.manager.saveIndex(index);
201
				if (JobManager.VERBOSE)
230
				if (JobManager.VERBOSE)
(-)search/org/eclipse/jdt/internal/core/search/indexing/BinaryIndexer.java (-5 / +12 lines)
Lines 26-31 Link Here
26
import org.eclipse.jdt.internal.compiler.lookup.TagBits;
26
import org.eclipse.jdt.internal.compiler.lookup.TagBits;
27
import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
27
import org.eclipse.jdt.internal.compiler.lookup.TypeConstants;
28
import org.eclipse.jdt.internal.compiler.util.SuffixConstants;
28
import org.eclipse.jdt.internal.compiler.util.SuffixConstants;
29
import org.eclipse.jdt.internal.core.search.JavaSearchDocument;
29
30
30
public class BinaryIndexer extends AbstractIndexer implements SuffixConstants {
31
public class BinaryIndexer extends AbstractIndexer implements SuffixConstants {
31
	private static final char[] BYTE = "byte".toCharArray(); //$NON-NLS-1$
32
	private static final char[] BYTE = "byte".toCharArray(); //$NON-NLS-1$
Lines 633-639 Link Here
633
				packageName = CharOperation.NO_CHAR;
634
				packageName = CharOperation.NO_CHAR;
634
				name = className;
635
				name = className;
635
			}
636
			}
636
			char[] enclosingTypeName = null;
637
//			char[][] enclosingTypeName = null;
638
			char[][] enclosingTypeNames = null;
637
			boolean isNestedType = reader.isNestedType();
639
			boolean isNestedType = reader.isNestedType();
638
			if (isNestedType) {
640
			if (isNestedType) {
639
				if (reader.isAnonymous()) {
641
				if (reader.isAnonymous()) {
Lines 642-648 Link Here
642
					name = reader.getInnerSourceName();
644
					name = reader.getInnerSourceName();
643
				}
645
				}
644
				if (reader.isLocal() || reader.isAnonymous()) {
646
				if (reader.isLocal() || reader.isAnonymous()) {
645
					enclosingTypeName = ONE_ZERO;
647
//					enclosingTypeName = ONE_ZERO;
648
					enclosingTypeNames = ONE_ZERO_CHAR;
646
				} else {
649
				} else {
647
					char[] fullEnclosingName = reader.getEnclosingTypeName();
650
					char[] fullEnclosingName = reader.getEnclosingTypeName();
648
					int nameLength = fullEnclosingName.length - packageNameIndex - 1;
651
					int nameLength = fullEnclosingName.length - packageNameIndex - 1;
Lines 650-657 Link Here
650
						// See PR 1GIR345: ITPJCORE:ALL - Indexer: NegativeArraySizeException
653
						// See PR 1GIR345: ITPJCORE:ALL - Indexer: NegativeArraySizeException
651
						return;
654
						return;
652
					}
655
					}
653
					enclosingTypeName = new char[nameLength]; 
656
					if (((JavaSearchDocument)this.document).getFirstLevel()) {
654
					System.arraycopy(fullEnclosingName, packageNameIndex + 1, enclosingTypeName, 0, nameLength);
657
						enclosingTypeNames = new char[1][nameLength]; 
658
						System.arraycopy(fullEnclosingName, packageNameIndex + 1, enclosingTypeNames[0], 0, nameLength);
659
					} else {
660
						enclosingTypeNames = CharOperation.splitOn('$', fullEnclosingName, packageNameIndex+1, fullEnclosingName.length);
661
					}
655
				}
662
				}
656
			}
663
			}
657
			// type parameters
664
			// type parameters
Lines 666-672 Link Here
666
			if (name == null) return;
673
			if (name == null) return;
667
			
674
			
668
			char[][] superinterfaces = replace('/', '.', reader.getInterfaceNames());
675
			char[][] superinterfaces = replace('/', '.', reader.getInterfaceNames());
669
			char[][] enclosingTypeNames = enclosingTypeName == null ? null : new char[][] {enclosingTypeName};
676
//			char[][] enclosingTypeNames = enclosingTypeName == null ? null : new char[][] {enclosingTypeName};
670
			int modifiers = reader.getModifiers();
677
			int modifiers = reader.getModifiers();
671
			switch (TypeDeclaration.kind(modifiers)) {
678
			switch (TypeDeclaration.kind(modifiers)) {
672
				case TypeDeclaration.CLASS_DECL :
679
				case TypeDeclaration.CLASS_DECL :
(-)src/org/eclipse/jdt/core/tests/model/SearchTests.java (-2 / +8 lines)
Lines 74-86 Link Here
74
		}
74
		}
75
	}
75
	}
76
	public static class SearchTypeNameRequestor extends TypeNameRequestor {
76
	public static class SearchTypeNameRequestor extends TypeNameRequestor {
77
		public SearchTypeNameRequestor() {
78
		}
79
		public SearchTypeNameRequestor(char enclosingSeparator) {
80
			this.enclosingSeparator = enclosingSeparator;
81
		}
77
		Vector results = new Vector();
82
		Vector results = new Vector();
83
		private char enclosingSeparator = '$';
78
		public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) {
84
		public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) {
79
			char[] typeName = 
85
			char[] typeName = 
80
				CharOperation.concat(
86
				CharOperation.concat(
81
					CharOperation.concatWith(enclosingTypeNames, '$'), 
87
					CharOperation.concatWith(enclosingTypeNames, this.enclosingSeparator), 
82
					simpleTypeName,
88
					simpleTypeName,
83
					'$');
89
					this.enclosingSeparator);
84
			results.addElement(new String(CharOperation.concat(packageName, typeName, '.')));
90
			results.addElement(new String(CharOperation.concat(packageName, typeName, '.')));
85
		}
91
		}
86
		public String toString(){
92
		public String toString(){
(-)src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java (+95 lines)
Lines 6794-6797 Link Here
6794
		removeLibraryEntry(JAVA_PROJECT, new Path("/JavaSearchBugs/lib/b148215.jar"));
6794
		removeLibraryEntry(JAVA_PROJECT, new Path("/JavaSearchBugs/lib/b148215.jar"));
6795
	}
6795
	}
6796
}
6796
}
6797
6798
/**
6799
 * Bug 148243: [search] correct results are missing in java search
6800
 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=148243"
6801
 */
6802
public void testBug148243_Valid() throws CoreException {
6803
	addLibraryEntry(JAVA_PROJECT, "/JavaSearchBugs/lib/b148243.jar", false);
6804
	try {
6805
		TypeNameRequestor requestor =  new SearchTests.SearchTypeNameRequestor('#'/*specific enclosing type names separator*/);
6806
		new SearchEngine().searchAllTypeNames(
6807
			null,
6808
			SearchPattern.R_PATTERN_MATCH, // case insensitive
6809
			"Inner3".toCharArray(),
6810
			SearchPattern.R_PATTERN_MATCH, // case insensitive
6811
			TYPE,
6812
			getJavaSearchScopeBugs(),
6813
			requestor,
6814
			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
6815
			null
6816
		);
6817
		new SearchEngine().searchAllTypeNames(
6818
			null,
6819
			SearchPattern.R_PATTERN_MATCH, // case insensitive
6820
			"LI*".toCharArray(),
6821
			SearchPattern.R_PATTERN_MATCH+SearchPattern.R_CASE_SENSITIVE,
6822
			TYPE,
6823
			getJavaSearchScopeBugs(),
6824
			requestor,
6825
			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
6826
			null
6827
		);
6828
		assertSearchResults(
6829
			"Unexpected all type names",
6830
			"pack.A#Inner1#Inner2#Inner3\n" +
6831
			"test4.I#LI\n" +
6832
			"test4.I$J#LIJ\n" +
6833
			"test4.I$J$K#LIJK",
6834
			requestor);
6835
	}
6836
	finally {
6837
		removeLibraryEntry(JAVA_PROJECT, new Path("/JavaSearchBugs/lib/b148243.jar"));
6838
	}
6839
}
6840
public void testBug148243_Invalid() throws CoreException {
6841
	addLibraryEntry(JAVA_PROJECT, "/JavaSearchBugs/lib/b148243.jar", false);
6842
	try {
6843
		TypeNameRequestor requestor =  new SearchTests.SearchTypeNameRequestor('#'/*specific enclosing type names separator*/);
6844
		new SearchEngine().searchAllTypeNames(
6845
			null,
6846
			SearchPattern.R_PATTERN_MATCH, // case insensitive
6847
			"Member3".toCharArray(),
6848
			SearchPattern.R_PATTERN_MATCH, // case insensitive
6849
			TYPE,
6850
			getJavaSearchScopeBugs(),
6851
			requestor,
6852
			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
6853
			null
6854
		);
6855
		new SearchEngine().searchAllTypeNames(
6856
			null,
6857
			SearchPattern.R_PATTERN_MATCH, // case insensitive
6858
			"D3".toCharArray(),
6859
			SearchPattern.R_PATTERN_MATCH, // case insensitive
6860
			TYPE,
6861
			getJavaSearchScopeBugs(),
6862
			requestor,
6863
			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
6864
			null
6865
		);
6866
		new SearchEngine().searchAllTypeNames(
6867
			null,
6868
			SearchPattern.R_PATTERN_MATCH, // case insensitive
6869
			"H3".toCharArray(),
6870
			SearchPattern.R_PATTERN_MATCH, // case insensitive
6871
			TYPE,
6872
			getJavaSearchScopeBugs(),
6873
			requestor,
6874
			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
6875
			null
6876
		);
6877
		assertSearchResults(
6878
			"Unexpected all type names",
6879
			"test1.X#Y#Z#Member1#Member2#Member3\n" +
6880
			"test2.B#C#D1#D2#D3\n" + 
6881
			"test3.E#F#G#H1#H2#H3",
6882
			requestor);
6883
		// correct result should be:
6884
		//	"test1.X$Y$Z#Member1#Member2#Member3\n" +
6885
		//	"test2.B$C#D1#D2#D3\n" + 
6886
		//	"test3.E#F$G#H1#H2#H3",
6887
	}
6888
	finally {
6889
		removeLibraryEntry(JAVA_PROJECT, new Path("/JavaSearchBugs/lib/b148243.jar"));
6890
	}
6891
}
6797
}
6892
}
(-)workspace/JavaSearchBugs/lib/b148243.jar (+50 lines)
Added Link Here
1
PK4†Û4META-INF/MANIFEST.MFþÊóMÌËLK-.Ñ
2
K-*ÎÌϳR0Ô3àåâåPK²îPKS‚Ú4!pack/A$Inner1$Inner2$Inner3.class}OMKÃ@}Ó¦YS[kýªx<¨‡†Ú£"”‚ =(½oâ¢[Ó?$©ÿ«'Áƒ?À%N+â.¼÷æÍììÌÇçÛ;€>z5ÂÞ³ŒžüÑá•1*TtZÑPÀ"´§òEú±4þM8UQN°ÏµÑù¡~t<!Xãä^¹¨ÃñЀMhÚ¨ëù,Té?cEèI$ã‰Lu›Vþ¨3Â~ðÏg÷6™§‘ºÔÅ{Ô/æ!xe~Ë,S™@‡ÐüÕF ËՕÅbinº}·,ùC€Dqˆ//Æ(8òËhœ¼beÁ¢—Ñ.M?UF¯*`n–ùµ[h3÷¸é:6°	[¬v˜‰Õ.œ/PKn²Ï›PKS‚Ú4pack/A$Inner1$Inner2.classmOMKÃ@œ×¦YSûa­ZO‚ë¡Áö¨¥ AJèÖ¸‘$õy<ôø£Ä—Ä„îÂ̼y³ïûçk`„?@?Ð{“Ñ‹?=¹1F¥ç?,B{!ߥKóä߅åûR?_ê§Ã9Áš%?ÊEŽ‡lB+ÐFÝ._C•>È0V„n?D2žËTõŸiåÏ:#ôƒMo_Üûd™FêZa{:*>BðÊþ,–Y¦2?.¡ùï¼@?ӕŢ2ׂG: mz°¢É:9Á1x@‹xó`Œ‚+¿¬?ÆÙ'¶>XÔà2Ú¥ic›Ñ«ÌͲ¿Sbmæ_ÚÁ.öàpªƒ>ó>«C8¿PKy•o”PKS‚Ú4pack/A$Inner1.classUNMOÂ@œ¥¥µ|UÔ³‰ñ@W		!!1!zÐpßÖ?.Ô-i‹ÿ˓‰?Êø¶…»É¼yoæíÎþïçÀWj„ÖVěpvó µÌF,Bw->E˜ý>Ek{¢´*¦„úí`E°æé«ôP‡ë£›ÐY*-w‘Ì^D”HB°Lc‘¬D¦LZÅ»Ê?ûäÓ{‚÷œî²X.”qÙ³¡I@ðK}žˆ<—¹ƒ€¥j‘É1ï¡òZUÆGË×àØ0‡ør\F‡»°ì?ÆÝ7š_Ljðíjˆ3FÿÀ}´J½]b]®3BçpÑgv	÷PKʽˆ+ó[PKS‚Ú4pack/A.class-ŽÁjÂ@†ÿјhŒÆj_ Ðƒz0ô\D„ %÷MºÔÕ¸‘$ö½zzèô¡J'›î²ÿÌ?ß,3?¿_ßfxtÐ ØW‘œƒ¥‹08‰¤B¿»ø$“’ñ\iU.Íñ$"X«ìMºh¢ã¡›à‡JËííËü âT†a–ˆ4¹ªüÑ*?ª ´ÃzÚ+ÁÝg·<‘kUa{9«F¼?Ö2_¥¢(dá`HèÕ?ž
3
xáÖ:Áx'T‡øò.¬»Àx 5½£ýÉI.«mŠº¬^ÝÀ±gxߨ?G—Ù¿:PK#+5wâ)PK-?Ú4pack/A.java+HLÎNLOU(ÒÖ¼\ XPš”“™¬?œ“X\¬à¨PÍËÅ	*.I,?Ëxæ奂¥qËAäq+0†*¨‘ ˆ?PK¹ï¥¬E—PK¢„Û4)test1/X$Y$Z$Member1$Member2$Member3.class?PMKÃ@}Ó¦Y“F[[?ëIŒ ±GÅKA¢”¢Þ6qÑ-1?$õy<øüQâ$†êAÄ]xïͼ™avß?^ßø4[…Êß»voÜ[÷L=†*ók>¨y(`ºù$½X&÷ÞE8QQA0?t¢‹cBsgwL0Fé?²Ñ„å “Ð	t¢Î§åŒ+ƊÐÒHÆc™é2®“Fñ sÂvð?U	öe:Í"u¢Ë^»ªÞ/w#8§I¢²Q,ó\å=Bÿ—‘K„öƒ fÖ*aã?5f¥ßjˆMð <ė_Î(8òªhí½`î™E6£Y%ڌÎWó|å/TØA—yÀCÑÇ2,¬°Zc&Vë°>PKœ?GÜÄPK¢„Û4!test1/X$Y$Z$Member1$Member2.class}PMKÃ@}Ó¦Y“Fûågјƒz0Ä/AˆzPŠzÛÄE·Ä’ÔÿåIðàðG‰“Šé¼73of˜Ù¯ï?O>†
4
Âv¡òÂ÷îÜ{÷Á½T/¡Êüš?Bw*_¥ËäÉ»§**æ©NtqFhîLÆ8}T6š°´`:?NÔÕ¬œq+ÃXúAÉx"3]ÆuÒ(žuNØ	¬pB°oÒY©s]öØUÕQ¹Á¹H•?c™ç*èÿŒX%´ÿQKs?OÝ$ì-X¤æѼe„]ð |ÄƗ3
5
Ž¼*Z‡ïXzc§›Ñ¬’&ڌÎoór¥¯TØA—yÈC{`
6
Wõ°Î¼ÁÞ¬PK‚RIt¼PK¢„Û4test1/X$Y$Z$Member1.classmOÁJÃ@}Ó¦Y“FÛ¦Vž„Ôƒ!½*^
7
‚õ õ¶‰‹n‰	dSÿ˓àÁð£ÄIŠ‡î›÷f†73?¿_ß"ìtãJ™*
8
‚Çà)¸Vo‰*#‹0\Èwf2	o“…J+‚}®s]]ºGÇs‚5+ž•‹.=؄A¬su³¬=îe’)‚©Ìæ²Ôµn“Võª
9
ao}FpïŠe™ªK]÷ºMõ´Þ…à]å¹*g™4FŸÐÿgAëý'„ƒ
10
îmœ®[§8Ÿƒú>ƒQ°
11
12
ôN>±õÁ¤—Ñ^%ÑgôZîa»©ï48À?£ÏŒ0Âv™íÁùPK*xÜ?ÿyPK¢„Û4test1/X$Y$Z.classMNÁJÃ@}Ó¦Y»Mmmý!õ`ÈYé¥ QJQo›¸è–¸?lêy<ø~”8»öÐöͼ73Ìûùýú?ãP GuÚuyö?>¦OaºVï*«•}Én˵®:B|a¬é„þñɊ-›g-ÑÇ0Á1aR«o6o¥nïUYk¬h*U¯Tk<ߊQ÷ja\ìœ<'È»fÓVúÒøÔ3ï??\Y«Ûe­œÓN`F˜ï¬¦×Ú_Ì	b[áìþ{c̲À?Áé'ö>¸èA2ÆAŒ0bLþ8?C?àSΒ{üçþPKªH9+ì>PK=„Û4test1/X$Y$Z.java+HLÎNLOU(I-.1´æåÁ‚Ò¤œÌd…äœÄâb…•H•(…j^.N¨pqIb	\Ö757)µÈ,?G?DÆPµ D1PK-j¬MŸPK¢„Û4
13
test2/B.class-MËÁP=S}P?Š?°ÃBÖX?X5,ˆýmÝp¥Ú¤ný—•ÄÂø(1­Î$gæœ3“óù¾Þ&è:0Ž–7=õ—LB÷"îÂ?Erò·áEFš`ÏU¢ô‚Ps•¥‹-X°	^ ¹É¯¡Ìö"Œ%¡¤‘ˆ"S¯DSŸÕ?Ъ¸ÁÝ¥yɵ*|{9.²Ñ'¡(âæF‡™_rÀ=QðbÀe´KÑ@“±õ?àÙ.ß;¥ãýPK
14
¨ÿ¼ðPKd„Û4test2/B.java+HLÎNLOU(I-.1²æå*(MÊÉLVHÎI,.VpR¨®ååPK?Úº&%#PK¢„Û4test2/B$C$D1$D2$D3.classeOMKÃ@}“¦Ù&F[kýêMÈA{0´=*L„ ¥÷M\tKL Iý_žþ”8EDwáÍÌ{óùþñú`Š±€E6ªnfáyñ4ˆgA<°	ƒ¥|’a.‹ûð:]ª¬!8§ºÐÍ¡sx´ ØQy§<tàúèÂ!ô]¨«Õcªª[™æŠ›'e&󅬴‰¿I»yÐ5a”üŸ|BðnÊU•©mR{,›EþeQ¨*Êe]«Z`ÈÌïz?Áýa–ávy©?SŒÒÂàS`ñçGaÝÉzÏìXð?–Xcô¿Ø®·úF‹}؎¹é&¶°
15
;ìí±%ööá~PK?Þ^|PK¢„Û4test2/B$C$D1$D2.class]OMOƒ@}C)D[êwo&´	íQãAˆ‰	у¦÷7º
16
BÔÿåÉă?ÀeœEcLw“73ïÍçç×û€aØʦ?…—A$Q?Ìl˜„ÑR¼ˆ°åcx›-eÞ¬sUªö‚Ð;>Y̸z?.zp<ôaqŸT•òfõœÉú^d…$ŒÓ*ÅBÔJÇ¿¤Ù>©†à§kcÏî]µªsy¥tހ•S½Á».KYDžhÙØ3ó¿ØÆÁùcFiàKx‰µ9A2×âGàS ñçmŽÂ.úÓ7^Ù1à2ZiaƒÑûI`»Ùé[1b;á¦>¶±‡³|ì±ÝgïÎ7PKs\tyPK¢„Û4test2/B$C$D1.classMNMKÃ@œ—¦Ic[ã×YÈA=š«âÁAzPzßÄE·Ä²Ûþ/O‚€?J|‹tfgæí{o¾>¿ÌpìÃ!DFj“¥7IžÌg>\Ât)Ö"­Eó’>”KY‚w¥e®	ƒÓ³ÁÍÛgb€ ÂaR¨FÞ¯ÞJÙ=‰²–„¸h+Q/D§¬Þ˜®yUš0.¶w^ÂÇvÕUòVÙO#¶/lÎv×4²Ëk¡µÔ>bBðßIplÞC^¾=-™g¶’áœö_NÉè³J{
17
Ï?0zgâ dôþLì0Fa·¯?{œ`Êǒ°‡}8`v„àPK0Ç8õQPK¢„Û4test2/B$C.class=NANÃ@§iÒ¤?–Â?zDáJÅ¡©??"8€z߶
18
)»å_œ?8ð…pRT[{ƶìŸß¯oNBx„ȱuWérž‡ð	Ó?zWi­ÌKúPn¸r„`¡?v7„ÁÙùšàçÍ3Ç J0D@˜Úðýö­äöI•5fES©z­ZÝñÑw¯ÚÆÅþà5!~l¶mÅ·º›‰vÙÝ'$wÆp›×ÊZ¶!f¢ì×櫌à­2œB~Bg$.¿†ÂҞËOŒ>¤ð½èc,˜ì$ôýÃ'˜JŽ¥w$qŒèPK-œ}Çå,PK\„Û4test2/B$C.java+HLÎNLOU(I-.1²æåÁ‚Ò¤œÌd…äœÄâb'g…j^.N¨`qIb	\ÎÅ,…]Î"‡]Ò*Y"APKAÐE/EŽPK¢„Û4test3/E$F$G$H1$H2$H3.classmOMOƒ@}ÓRV(öËZ¿êA‚5^šVLˆ4½/¸Q„¨ÿ˓‰€?Ê8`ÝMÞ{óffgöãó퀋=?aXª¢ôœ‰=µ/mßµýSÛ÷4Bo.Ÿ¥“ÈôÁ¹	ç**	úyœÆå¡yx4#hãì^™h°ЂNèqª®O¡Êïd˜( È"™ÌdWñÒÔÊǸ Œ‚ÿfŸÌÛl‘GjWÅúä¤Z„`]¥©Êlj,
19
UíýC‚X¼`mm:¿g¾+°Mèÿ^åjð°~Õ!¾ü7FÁ‘SÇ@ëø+/,0õÚÔÑf´¾˜Wë|§Æ.zÌÐÐÇÖa`Äj“y‹Õ3±Ú…ñPK‚…ëŸPK¢„Û4test3/E$F$G$H1$H2.classeOMOƒ@}C)Å~û­êAR9j¼4­˜=hz_p£4	Pÿ—'þ”q 4ÝMÞ¼÷fvgæûçóÀG:B¯?yá:S{fßØÞØö.t¨„îB¼	'ɳs,dX´«(‰ŠkBãätNP'é“4рa¡	?Ðñ£DÞ-_™=Š –„¾Ÿ†"ž‹,*umªÅK”þZãK‚ù?.³P΢²R›ž—S¬Û$‘Ù$y.s}BëÏcC‚^<]eíÚÿ”ð‚„áZ{ÛsË´‹cð/(ñåÝuVN¥?æÙ6ޙ(0µ•‰£Us›U¾]a]Ž#¨èa€-Øf¶Ë‘˜íqÜgvãPKc¾íšœPK¢„Û4test3/E$F$G$H1.classUO»NÃ@œuvL‡w:$@?•P‚h¢„ YP€ÒŸÍ	.2¶d;üÀG!öL
20
r'ÍìÎÎÞî}ÿ|~a(`ºµªê‹hΛp>°	ý¥|“Q&óçè>Yª´&8W:×õ5¡urº ؓâIyhÁõцCèÅ:Ww«×D•?2Éa©Ì²Ô&_‹vý¢+oN½$xŪLÕL›3=7+üÛ<Wå$“U¥*?¡ó¯S`— Ö¯ÆÁ2Ÿ8$›#ÂùØÔÆ8;añåågQ“í³l½s`ÁctÑF‡Ñÿ30o7õnƒ=ô™‡üh€ìÁeW€}掎àþPKËgrPK¢„Û4test3/E$F$G.classMN»NÃ@œµvœæU#¹
21
,‹’(M”$
22
Pú³9ÁEƖl‡ÿJ…DÁðQˆõ‘"wÒìÌîÜíüü~}Hp&`ú­jڛx-¢;‡0^˲|?³µÊ[‚;Ñ¥n§ûârEpfՋòaÃЃK¥ºT›÷LÕÏ2+!L«\+YëNïšNû¦Â Ý[yKðŸªM?«…î<îüºÛOîËRÕ³B6?jB‚Ø=ã&ë	a¸÷S´LÖ2Á9Ø?î_È(XÅF½«Ol™Xð]Ó´Ñgþ
23
\f>48˜kȌpˆ#x8fv
24
ïPKÅ öKPK¢„Û4
25
test3/E.class-ŽÁJÃ@†ÿIÓ¬I£­ÕzPñhñRÚ"=(½oâ [â²[ß˓àÁð¡ÄIš]ö›ùÿ™eæ÷ïûÀ5N‚òìüM¶T	“­þÐY¥íköXl¹ô„hn¬ñw„Áùņ.êN0@œbˆˆ0Î?å‡Ý{Áͳ.*&LóºÔÕF7¦Õ½ú7ãqÞ?»%$Oõ®)yeÚz´¼jgÒ{k¹YTÚ9v
26
S¨ÿ2[ÍÖ²†g?í!¹²‡P‰Ê:
27
/¿pð)I€Duf€‘0Ý7H<ì¼£ŽcL$&R;–w‚øPK© _…ã&PK‹„Û4test3/E.java+HLÎNLOU(I-.1¶æå*(MÊÉLVHÎI,.VpU¨æåâ„
28
—$–ÀeÜTÜÁrX%=!rØ%? ’Øe?a²µ`
29
L‚ "PKfsJ®PK3†Û4test4/I$J$LIJ.classUNÍJÃ@œ¯I“&¦öG_@èA=oJ/!%ԃÒû&.º%n »õ½<	|Júí*…îÂ|ßÌΰóóûõ
30
à§1z„¡•ÆÞäÅl9+‹eŒ?0ވw‘7B¿äÕF֖Ý)­ìœœ_¬	á¢}–)$úˆ£Ri¹Ú¾U²{U#	Ó²­E³?rü_í«2Î}ðé-!}l·]-ï•s
31
X¿rY¡µì?0FšSB²?rã¼ÀâËmcf¹ç@ÿòƒ^zH#/8bÌþ<‡þýØãcž©?Op‚dPKD—˜”æ2PK3†Û4test4/I$J.class=ŽÁJÃ@†ÿIÓ¤IS[k_ Ðƒz0Þ,^
32
BJЃÒû&tKÜ@vë{y<ø}(q¥»ì7óÿ3ËÌáçëÀ5f!<Bäغ›4[¬Cø„ÉN½«´Ræ%},v\:B°ÔF»;BïübCðWõ–cô%è# ŒsmøaÿVp󬊊	Ó¼.UµQ?nõ¿é»Wm	Ãü8ð–?Õû¦ä{ÝvÄ»jç’ÌnV•²–mˆ)atü¶È³µ,#Ē =$W¶†¢ÒNýËO>$ñƒÎô0&
33
G?wÒqŒ‰ÄXj§òÎýPK2ïºóç.PK-†Û4test4/I$J.java+HLÎNLOU(I-.1±æå*(MÊÉLVHÎI,.VðTñR¨æåâ„
34
—$–Àå|<?rµ¼\@PKÃ`"27DPK3†Û4test4/I$J$K$LIJK.class]NANÃ0œm҄º?–Â?rDHܨ¸TBJÁÔ»,p)vù'$<€G!ֆ–f=3»ëùüzÿpŽÃÂÔ)ë.Š2_櫼*—«1«ù"‹VšÇâ¶Þ¨Æ’¹6Ú]¢ã“5!^tJ Â(Ã	aRi£n¶ÏµêïeÝ*¬êÙ®e¯=ÿc÷¤­÷þÿ{IwݶoÔµö?"Xg>!+?Qý¢•Ö*›bFÿ™ç­~ŽÀéàñåTŒ)³"p`xú†?W~ “ F3f?
35
\wƒ¿p‚)WÆ÷q€Ñ7PK«ÙºÞé=PK3†Û4test4/I$J$K.classMNANÃ0œMӄº)-… åˆ?¸?¸TBJÁÔ»,p)vù'$<€G!ֆC½òŒg¼^Ï÷Ï瀥ˆc§¬»,Ê|™¯RĄÙF¾É¢•æ¹¸¯7ªq„äZínƒ“Ó5!^tOJ`€Q†!´ÒFÝm_kÕ?ʺU„yÕ5²]Ë^{ýoÆîE[¤ÚùòŠ ºmߨ[í{DpÏ}BV£úE+­U6ŜÃí<Í«r¹â©žpN¿ˆ‹S1¦¬Š ?áÙöÞùA0&ÁŒ0fÌþ˜'ÁÛ8ŌYðÝïCŒ~PK©…—ê8PK*†Û4test4/I$J$K.java+HLÎNLOU(I-.1±æå*(MÊÉLVHÎI,.VðTñRñV¨æåâ„
36
—$–Àe}<½€’µ¼\@PK'´Øî:GPK3†Û4test4/I$LI.classENËJÄ@¬N²7F÷¡? xPÁ›‹—a`Ѓ²÷It–8?̬ÿåIðàøQbg\Øn¨îꮦúç÷ëÀŽBŒ×•<UR #L×ú]W­v/ÕC½6M äël¸%¤gç+B¶ìžM?ã#䄉²ÎÜoÞjÓ?éº5„¹êÝ®to¾fáÕzB©vŽ7ìÿØmúÆÜÙA’ËËÁžEÒ9Ó/[í½ñs‚Ø^%qþC'Á(˜U‘£‹Oì}p“ `Ìã0Å>cù/àz÷‡'˜r-âùGÿPKb¥‚ôâ'PK3†Û4
37
test4/I.class-NÁJÃ@}“¦Y£­­? xPÁ›ÒKAXXڃ¥÷M\tKÜ@vëy<ø~”8I3ü™÷f†™ß¿ïw8ˆ"î)¦;ý¡‹Z»×b]îLÉ£u6,£«ë-!^6/&ÃiŽ1ÂDYgVû÷Ò´]ֆ0SM¥ë­nmÇ1oÖR5œ{ dÏ;­Ì“íú‰¼ínréœi—µöÞx?Ï
38
+—J"%qþ?;Á(˜=Æ7_8úä"BƘôb„cÆü0Àù¤×N{œ`Ê9ãÞÇé?PKŽ/
39
Má$PK/†Û4test4/I.java+HLÎNLOU(I-.1±æå*(MÊÉLVHÎI,.VðT¨æåâ„
40
—$–Àe|€Rµ¼\@PK¬`=4APK-?Ú4
41
.classpath³±¯ÈÍQ(K-*ÎÌϳU2Ô3PRHÍKÎOÉÌK·U
42
43
qÓµP²·ãå²IÎI,..H,Ér8¼Ô¼’¢J…ì̼[¥â¢d%? ­’’>neÉùy0eùEéz©É9™Å©zY)%z9‰¥yÉ@«õ¼‚\ã?ýýB=ý\ƒð™–_ZRPZ‚b¯?>²cPK¡Ô#X‹âPK-?Ú4.projectuPA <kâLï‚Õ<`=hü€z66
44
MÍB?Ï(jjâmgvfg€ž]»|Zeô>ËÉ:[‚F*]ï³Ûõ¼Úe‡r1g=š„;?¨zç՞?1Í;(«¼ØmŠíÝ¢`42a%L×?v%£ï)°éŽ?€NP5¨V^z%xôV®edRšÁš€hUo?4ÒaÐüÁ£ð[Á;8ÖCȶ	Ó)ÁèoJbÞ5|¤’zÿŒûP êâ¹ï?Ïs§ŸøPK¥?GÃPK4†Û4²îMETA-INF/MANIFEST.MFþÊPKS‚Ú4n²Ï›!apack/A$Inner1$Inner2$Inner3.classPKS‚Ú4y•o”¸pack/A$Inner1$Inner2.classPKS‚Ú4ʽˆ+ó[pack/A$Inner1.classPKS‚Ú4#+5wâ)<pack/A.classPK-?Ú4¹ï¥¬E—Xpack/A.javaPK¢„Û4œ?GÜÄ)Ötest1/X$Y$Z$Member1$Member2$Member3.classPK¢„Û4‚RIt¼!?test1/X$Y$Z$Member1$Member2.classPK¢„Û4*xÜ?ÿy¡test1/X$Y$Z$Member1.classPK¢„Û4ªH9+ì>ç	test1/X$Y$Z.classPK=„Û4-j¬MŸtest1/X$Y$Z.javaPK¢„Û4
45
¨ÿ¼ð
46
?test2/B.classPKd„Û4?Úº&%#”test2/B.javaPK¢„Û4?Þ^|ótest2/B$C$D1$D2$D3.classPK¢„Û4s\ty?test2/B$C$D1$D2.classPK¢„Û40Ç8õQ‰test2/B$C$D1.classPK¢„Û4-œ}Çå,¾test2/B$C.classPK\„Û4AÐE/EŽàtest2/B$C.javaPK¢„Û4‚…ëŸatest3/E$F$G$H1$H2$H3.classPK¢„Û4c¾íšœÀtest3/E$F$G$H1$H2.classPK¢„Û4Ëgrtest3/E$F$G$H1.classPK¢„Û4Å öKctest3/E$F$G.classPK¢„Û4© _…ã&
47
˜test3/E.classPK‹„Û4fsJ®¶test3/E.javaPK3†Û4D—˜”æ2:test4/I$J$LIJ.classPK3†Û42ïºóç.atest4/I$J.classPK-†Û4Ã`"27D…test4/I$J.javaPK3†Û4«ÙºÞé=øtest4/I$J$K$LIJK.classPK3†Û4©…—ê8%test4/I$J$K.classPK*†Û4'´Øî:GNtest4/I$J$K.javaPK3†Û4b¥‚ôâ'Ætest4/I$LI.classPK3†Û4Ž/
48
Má$
49
ætest4/I.classPK/†Û4¬`=4A!test4/I.javaPK-?Ú4¡Ô#X‹â
50
p!.classpathPK-?Ú4¥?GÃ3".projectPK##Ñ,#

Return to bug 148243