Mercurial > projects > dwt-addons
annotate dwtx/core/runtime/Path.d @ 97:0168c579a3f9
Fix path handling, thanks yidabu for reporting.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Fri, 01 Aug 2008 07:06:52 +0200 |
parents | 1088ca33d3e0 |
children |
rev | line source |
---|---|
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 /******************************************************************************* |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
2 * Copyright (c) 2000, 2008 IBM Corporation and others. |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.eclipse.org/legal/epl-v10.html |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * IBM Corporation - initial API and implementation |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 * Port to the D programming language: |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 * Frank Benoit <benoit@tionex.de> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 *******************************************************************************/ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 module dwtx.core.runtime.Path; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 import tango.io.FilePath; |
97
0168c579a3f9
Fix path handling, thanks yidabu for reporting.
Frank Benoit <benoit@tionex.de>
parents:
95
diff
changeset
|
16 static import tango.io.Path; |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 import dwtx.core.runtime.IPath; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 import dwtx.core.runtime.Assert; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 import dwt.dwthelper.utils; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 |
95
1088ca33d3e0
Removed version=TANGOSVN for release 0.99.7
Frank Benoit <benoit@tionex.de>
parents:
94
diff
changeset
|
22 import tango.io.model.IFile; |
94 | 23 |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 static import tango.text.Text; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 alias tango.text.Text.Text!(char) StringBuffer; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 * The standard implementation of the <code>IPath</code> interface. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 * Paths are always maintained in canonicalized form. That is, parent |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 * references (i.e., <code>../../</code>) and duplicate separators are |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 * resolved. For example, |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 * <pre> new Path("/a/b").append("../foo/bar")</pre> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 * will yield the path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 * <pre> /a/foo/bar</pre> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 * <p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 * This class can be used without OSGi running. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 * </p><p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 * This class is not intended to be subclassed by clients but |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 * may be instantiated. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 * </p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 * @see IPath |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
43 * @noextend This class is not intended to be subclassed by clients. |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 public class Path : IPath, Cloneable { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 /** masks for separator values */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 private static const int HAS_LEADING = 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 private static const int IS_UNC = 2; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 private static const int HAS_TRAILING = 4; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 private static const int ALL_SEPARATORS = HAS_LEADING | IS_UNC | HAS_TRAILING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 /** Constant empty string value. */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 private static const String EMPTY_STRING = ""; //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 /** Constant value indicating no segments */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 private static const String[] NO_SEGMENTS = null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 /** Constant value containing the empty path with no device. */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
60 public static const Path EMPTY; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 /** Mask for all bits that are involved in the hash code */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
63 private static const int HASH_MASK = ~HAS_TRAILING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 /** Constant root path string (<code>"/"</code>). */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
66 private static const String ROOT_STRING = "/"; //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
67 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
68 /** Constant value containing the root path with no device. */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
69 public static const Path ROOT; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
71 /** Constant value indicating if the current platform is Windows */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 version(Windows){ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 private static const bool WINDOWS = true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
74 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
75 else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
76 private static const bool WINDOWS = false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
77 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
78 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
79 static this(){ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
80 EMPTY = new Path(EMPTY_STRING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
81 ROOT = new Path(ROOT_STRING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
82 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
83 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 /** The device id string. May be null if there is no device. */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
85 private String device = null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
86 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
87 //Private implementation note: the segments and separators |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
88 //arrays are never modified, so that they can be shared between |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
89 //path instances |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 /** The path segments */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 private String[] segments_; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
93 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
94 /** flags indicating separators (has leading, is UNC, has trailing) */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 private int separators; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
96 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
98 * Constructs a new path from the given string path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
99 * The string path must represent a valid file system path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
100 * on the local file system. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
101 * The path is canonicalized and double slashes are removed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
102 * except at the beginning. (to handle UNC paths). All forward |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
103 * slashes ('/') are treated as segment delimiters, and any |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
104 * segment and device delimiters for the local file system are |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
105 * also respected. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
106 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
107 * @param pathString the portable string path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 * @see IPath#toPortableString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
109 * @since 3.1 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
110 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
111 public static IPath fromOSString(String pathString) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
112 return new Path(pathString); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
113 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
114 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
115 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
116 * Constructs a new path from the given path string. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
117 * The path string must have been produced by a previous |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
118 * call to <code>IPath.toPortableString</code>. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
119 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
120 * @param pathString the portable path string |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
121 * @see IPath#toPortableString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
122 * @since 3.1 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
123 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
124 public static IPath fromPortableString(String pathString) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
125 int firstMatch = pathString.indexOf(DEVICE_SEPARATOR) + 1; |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
126 //no extra work required if no device characters |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
127 if (firstMatch <= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
128 return (new Path()).initialize(null, pathString); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
129 //if we find a single colon, then the path has a device |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
130 String devicePart = null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
131 int pathLength = pathString.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
132 if (firstMatch is pathLength || pathString.charAt(firstMatch) !is DEVICE_SEPARATOR) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
133 devicePart = pathString.substring(0, firstMatch); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
134 pathString = pathString.substring(firstMatch, pathLength); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
135 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
136 //optimize for no colon literals |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
137 if (pathString.indexOf(DEVICE_SEPARATOR) is -1) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
138 return (new Path()).initialize(devicePart, pathString); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
139 //contract colon literals |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
140 char[] chars = pathString/+.toCharArray()+/; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
141 int readOffset = 0, writeOffset = 0, length = chars.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
142 while (readOffset < length) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
143 if (chars[readOffset] is DEVICE_SEPARATOR) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
144 if (++readOffset >= length) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
145 break; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
146 chars[writeOffset++] = chars[readOffset++]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
147 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
148 return (new Path()).initialize(devicePart, chars[ 0 .. writeOffset] ); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
149 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
150 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
151 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
152 * Private constructor. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
153 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
154 private this() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
155 // not allowed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
156 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
157 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
158 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
159 * Constructs a new path from the given string path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
160 * The string path must represent a valid file system path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
161 * on the local file system. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
162 * The path is canonicalized and double slashes are removed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
163 * except at the beginning. (to handle UNC paths). All forward |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
164 * slashes ('/') are treated as segment delimiters, and any |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
165 * segment and device delimiters for the local file system are |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
166 * also respected (such as colon (':') and backslash ('\') on some file systems). |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
167 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
168 * @param fullPath the string path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
169 * @see #isValidPath(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
170 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
171 public this(String fullPath) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
172 String devicePart = null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
173 if (WINDOWS) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
174 //convert backslash to forward slash |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
175 fullPath = fullPath.indexOf('\\') is -1 ? fullPath : fullPath.replace('\\', SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
176 //extract device |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
177 int i = fullPath.indexOf(DEVICE_SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
178 if (i !is -1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
179 //remove leading slash from device part to handle output of URL.getFile() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
180 int start = fullPath.charAt(0) is SEPARATOR ? 1 : 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
181 devicePart = fullPath.substring(start, i + 1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
182 fullPath = fullPath.substring(i + 1, fullPath.length); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
183 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
184 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
185 initialize(devicePart, fullPath); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
186 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
187 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
188 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
189 * Constructs a new path from the given device id and string path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
190 * The given string path must be valid. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
191 * The path is canonicalized and double slashes are removed except |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
192 * at the beginning (to handle UNC paths). All forward |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
193 * slashes ('/') are treated as segment delimiters, and any |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
194 * segment delimiters for the local file system are |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
195 * also respected (such as backslash ('\') on some file systems). |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
196 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
197 * @param device the device id |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
198 * @param path the string path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
199 * @see #isValidPath(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
200 * @see #setDevice(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
201 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
202 public this(String device, String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
203 if (WINDOWS) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
204 //convert backslash to forward slash |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
205 path = path.indexOf('\\') is -1 ? path : path.replace('\\', SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
206 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
207 initialize(device, path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
208 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
209 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
210 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
211 * Private constructor. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
212 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
213 private this(String device, String[] segments_, int _separators) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
214 // no segment validations are done for performance reasons |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
215 this.segments_ = segments_; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
216 this.device = device; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
217 //hash code is cached in all but the bottom three bits of the separators field |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
218 this.separators = (computeHashCode() << 3) | (_separators & ALL_SEPARATORS); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
219 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
220 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
221 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
222 * @see IPath#addFileExtension |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
223 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
224 public IPath addFileExtension(String extension) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
225 if (isRoot() || isEmpty() || hasTrailingSeparator()) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
226 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
227 int len = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
228 String[] newSegments = new String[len]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
229 System.arraycopy(segments_, 0, newSegments, 0, len - 1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
230 newSegments[len - 1] = segments_[len - 1] ~ '.' ~ extension; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
231 return new Path(device, newSegments, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
232 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
233 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
234 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
235 * @see IPath#addTrailingSeparator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
236 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
237 public IPath addTrailingSeparator() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
238 if (hasTrailingSeparator() || isRoot()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
239 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
240 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
241 //XXX workaround, see 1GIGQ9V |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
242 if (isEmpty()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
243 return new Path(device, segments_, HAS_LEADING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
244 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
245 return new Path(device, segments_, separators | HAS_TRAILING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
246 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
247 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
248 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
249 * @see IPath#append(IPath) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
250 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
251 public IPath append(IPath tail) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
252 //optimize some easy cases |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
253 if (tail is null || tail.segmentCount() is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
254 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
255 //these call chains look expensive, but in most cases they are no-ops |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
256 if (this.isEmpty()) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
257 return tail.setDevice(device).makeRelative().makeUNC(isUNC()); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
258 if (this.isRoot()) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
259 return tail.setDevice(device).makeAbsolute().makeUNC(isUNC()); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
260 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
261 //concatenate the two segment arrays |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
262 int myLen = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
263 int tailLen = tail.segmentCount(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
264 String[] newSegments = new String[myLen + tailLen]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
265 System.arraycopy(segments_, 0, newSegments, 0, myLen); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
266 for (int i = 0; i < tailLen; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
267 newSegments[myLen + i] = tail.segment(i); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
268 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
269 //use my leading separators and the tail's trailing separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
270 Path result = new Path(device, newSegments, (separators & (HAS_LEADING | IS_UNC)) | (tail.hasTrailingSeparator() ? HAS_TRAILING : 0)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
271 String tailFirstSegment = newSegments[myLen]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
272 if (tailFirstSegment.equals("..") || tailFirstSegment.equals(".")) { //$NON-NLS-1$ //$NON-NLS-2$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
273 result.canonicalize(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
274 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
275 return result; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
276 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
277 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
278 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
279 * @see IPath#append(java.lang.String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
280 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
281 public IPath append(String tail) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
282 //optimize addition of a single segment |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
283 if (tail.indexOf(SEPARATOR) is -1 && tail.indexOf("\\") is -1 && tail.indexOf(DEVICE_SEPARATOR) is -1) { //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
284 int tailLength = tail.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
285 if (tailLength < 3) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
286 //some special cases |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
287 if (tailLength is 0 || ".".equals(tail)) { //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
288 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
289 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
290 if ("..".equals(tail)) //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
291 return removeLastSegments(1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
292 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
293 //just add the segment |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
294 int myLen = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
295 String[] newSegments = new String[myLen + 1]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
296 System.arraycopy(segments_, 0, newSegments, 0, myLen); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
297 newSegments[myLen] = tail; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
298 return new Path(device, newSegments, separators & ~HAS_TRAILING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
299 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
300 //go with easy implementation |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
301 return append(new Path(tail)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
302 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
303 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
304 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
305 * Destructively converts this path to its canonical form. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
306 * <p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
307 * In its canonical form, a path does not have any |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
308 * "." segments, and parent references ("..") are collapsed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
309 * where possible. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
310 * </p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
311 * @return true if the path was modified, and false otherwise. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
312 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
313 private bool canonicalize() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
314 //look for segments that need canonicalizing |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
315 for (int i = 0, max = segments_.length; i < max; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
316 String segment = segments_[i]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
317 if (segment.charAt(0) is '.' && (segment.equals("..") || segment.equals("."))) { //$NON-NLS-1$ //$NON-NLS-2$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
318 //path needs to be canonicalized |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
319 collapseParentReferences(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
320 //paths of length 0 have no trailing separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
321 if (segments_.length is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
322 separators &= (HAS_LEADING | IS_UNC); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
323 //recompute hash because canonicalize affects hash |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
324 separators = (separators & ALL_SEPARATORS) | (computeHashCode() << 3); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
325 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
326 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
327 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
328 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
329 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
330 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
331 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
332 * Clones this object. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
333 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
334 public Path clone() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
335 return new Path(device, segments_, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
336 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
337 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
338 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
339 * Destructively removes all occurrences of ".." segments from this path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
340 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
341 private void collapseParentReferences() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
342 int segmentCount = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
343 String[] stack = new String[segmentCount]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
344 int stackPointer = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
345 for (int i = 0; i < segmentCount; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
346 String segment = segments_[i]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
347 if (segment.equals("..")) { //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
348 if (stackPointer is 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
349 // if the stack is empty we are going out of our scope |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
350 // so we need to accumulate segments. But only if the original |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
351 // path is relative. If it is absolute then we can't go any higher than |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
352 // root so simply toss the .. references. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
353 if (!isAbsolute()) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
354 stack[stackPointer++] = segment; //stack push |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
355 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
356 // if the top is '..' then we are accumulating segments so don't pop |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
357 if ("..".equals(stack[stackPointer - 1])) //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
358 stack[stackPointer++] = ".."; //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
359 else |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
360 stackPointer--; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
361 //stack pop |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
362 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
363 //collapse current references |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
364 } else if (!segment.equals(".") || segmentCount is 1) //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
365 stack[stackPointer++] = segment; //stack push |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
366 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
367 //if the number of segments hasn't changed, then no modification needed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
368 if (stackPointer is segmentCount) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
369 return; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
370 //build the new segment array backwards by popping the stack |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
371 String[] newSegments = new String[stackPointer]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
372 System.arraycopy(stack, 0, newSegments, 0, stackPointer); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
373 this.segments_ = newSegments; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
374 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
375 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
376 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
377 * Removes duplicate slashes from the given path, with the exception |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
378 * of leading double slash which represents a UNC path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
379 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
380 private String collapseSlashes(String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
381 int length = path.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
382 // if the path is only 0, 1 or 2 chars long then it could not possibly have illegal |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
383 // duplicate slashes. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
384 if (length < 3) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
385 return path; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
386 // check for an occurrence of // in the path. Start at index 1 to ensure we skip leading UNC // |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
387 // If there are no // then there is nothing to collapse so just return. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
388 if (path.indexOf("//", 1) is -1) //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
389 return path; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
390 // We found an occurrence of // in the path so do the slow collapse. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
391 char[] result = new char[path.length]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
392 int count = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
393 bool hasPrevious = false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
394 char[] characters = path/+.toCharArray()+/; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
395 for (int index = 0; index < characters.length; index++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
396 char c = characters[index]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
397 if (c is SEPARATOR) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
398 if (hasPrevious) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
399 // skip double slashes, except for beginning of UNC. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
400 // note that a UNC path can't have a device. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
401 if (device is null && index is 1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
402 result[count] = c; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
403 count++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
404 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
405 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
406 hasPrevious = true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
407 result[count] = c; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
408 count++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
409 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
410 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
411 hasPrevious = false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
412 result[count] = c; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
413 count++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
414 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
415 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
416 return result[ 0 .. count]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
417 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
418 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
419 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
420 * Computes the hash code for this object. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
421 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
422 private int computeHashCode() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
423 int hash = device.length is 0 ? 17 : dwt.dwthelper.utils.toHash(device); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
424 int segmentCount = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
425 for (int i = 0; i < segmentCount; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
426 //this function tends to given a fairly even distribution |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
427 hash = hash * 37 + dwt.dwthelper.utils.toHash(segments_[i]); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
428 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
429 return hash; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
430 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
431 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
432 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
433 * Returns the size of the string that will be created by toString or toOSString. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
434 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
435 private int computeLength() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
436 int length = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
437 if (device !is null) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
438 length += device.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
439 if ((separators & HAS_LEADING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
440 length++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
441 if ((separators & IS_UNC) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
442 length++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
443 //add the segment lengths |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
444 int max = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
445 if (max > 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
446 for (int i = 0; i < max; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
447 length += segments_[i].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
448 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
449 //add the separator lengths |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
450 length += max - 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
451 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
452 if ((separators & HAS_TRAILING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
453 length++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
454 return length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
455 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
456 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
457 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
458 * Returns the number of segments in the given path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
459 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
460 private int computeSegmentCount(String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
461 int len = path.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
462 if (len is 0 || (len is 1 && path.charAt(0) is SEPARATOR)) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
463 return 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
464 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
465 int count = 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
466 int prev = -1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
467 int i; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
468 while ((i = path.indexOf(SEPARATOR, prev + 1)) !is -1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
469 if (i !is prev + 1 && i !is len) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
470 ++count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
471 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
472 prev = i; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
473 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
474 if (path.charAt(len - 1) is SEPARATOR) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
475 --count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
476 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
477 return count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
478 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
479 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
480 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
481 * Computes the segment array for the given canonicalized path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
482 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
483 private String[] computeSegments(String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
484 // performance sensitive --- avoid creating garbage |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
485 int segmentCount = computeSegmentCount(path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
486 if (segmentCount is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
487 return NO_SEGMENTS; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
488 String[] newSegments = new String[segmentCount]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
489 int len = path.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
490 // check for initial slash |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
491 int firstPosition = (path.charAt(0) is SEPARATOR) ? 1 : 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
492 // check for UNC |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
493 if (firstPosition is 1 && len > 1 && (path.charAt(1) is SEPARATOR)) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
494 firstPosition = 2; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
495 int lastPosition = (path.charAt(len - 1) !is SEPARATOR) ? len - 1 : len - 2; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
496 // for non-empty paths, the number of segments is |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
497 // the number of slashes plus 1, ignoring any leading |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
498 // and trailing slashes |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
499 int next = firstPosition; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
500 for (int i = 0; i < segmentCount; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
501 int start = next; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
502 int end = path.indexOf(SEPARATOR, next); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
503 if (end is -1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
504 newSegments[i] = path.substring(start, lastPosition + 1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
505 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
506 newSegments[i] = path.substring(start, end); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
507 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
508 next = end + 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
509 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
510 return newSegments; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
511 } |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
512 |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
513 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
514 * Returns the platform-neutral encoding of the given segment onto |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
515 * the given string buffer. This escapes literal colon characters with double colons. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
516 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
517 private void encodeSegment(String string, StringBuffer buf) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
518 int len = string.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
519 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
520 char c = string.charAt(i); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
521 buf.append(c); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
522 if (c is DEVICE_SEPARATOR) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
523 buf.append(DEVICE_SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
524 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
525 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
526 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
527 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
528 * Compares objects for equality. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
529 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
530 public override int opEquals(Object obj) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
531 if (this is obj) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
532 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
533 if (!(cast(Path)obj)) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
534 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
535 Path target = cast(Path) obj; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
536 //check leading separators and hash code |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
537 if ((separators & HASH_MASK) !is (target.separators & HASH_MASK)) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
538 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
539 String[] targetSegments = target.segments_; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
540 int i = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
541 //check segment count |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
542 if (i !is targetSegments.length) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
543 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
544 //check segments in reverse order - later segments more likely to differ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
545 while (--i >= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
546 if (!segments_[i].equals(targetSegments[i])) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
547 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
548 //check device last (least likely to differ) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
549 return device is target.device || (device !is null && device.equals(target.device)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
550 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
551 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
552 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
553 * @see IPath#getDevice |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
554 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
555 public String getDevice() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
556 return device; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
557 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
558 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
559 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
560 * @see IPath#getFileExtension |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
561 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
562 public String getFileExtension() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
563 if (hasTrailingSeparator()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
564 return null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
565 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
566 String lastSegment = lastSegment(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
567 if (lastSegment is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
568 return null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
569 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
570 int index = lastSegment.lastIndexOf('.'); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
571 if (index is -1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
572 return null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
573 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
574 return lastSegment.substring(index + 1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
575 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
576 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
577 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
578 * Computes the hash code for this object. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
579 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
3
diff
changeset
|
580 public override hash_t toHash() { |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
581 return separators & HASH_MASK; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
582 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
583 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
584 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
585 * @see IPath#hasTrailingSeparator2 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
586 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
587 public bool hasTrailingSeparator() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
588 return (separators & HAS_TRAILING) !is 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
589 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
590 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
591 /* |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
592 * Initialize the current path with the given string. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
593 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
594 private IPath initialize(String deviceString, String path) { |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
595 //Assert.isNotNull(path); // allow for DWT |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
596 this.device = deviceString; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
597 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
598 path = collapseSlashes(path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
599 int len = path.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
600 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
601 //compute the separators array |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
602 if (len < 2) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
603 if (len is 1 && path.charAt(0) is SEPARATOR) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
604 this.separators = HAS_LEADING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
605 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
606 this.separators = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
607 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
608 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
609 bool hasLeading = path.charAt(0) is SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
610 bool isUNC = hasLeading && path.charAt(1) is SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
611 //UNC path of length two has no trailing separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
612 bool hasTrailing = !(isUNC && len is 2) && path.charAt(len - 1) is SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
613 separators = hasLeading ? HAS_LEADING : 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
614 if (isUNC) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
615 separators |= IS_UNC; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
616 if (hasTrailing) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
617 separators |= HAS_TRAILING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
618 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
619 //compute segments and ensure canonical form |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
620 segments_ = computeSegments(path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
621 if (!canonicalize()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
622 //compute hash now because canonicalize didn't need to do it |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
623 separators = (separators & ALL_SEPARATORS) | (computeHashCode() << 3); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
624 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
625 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
626 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
627 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
628 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
629 * @see IPath#isAbsolute |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
630 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
631 public bool isAbsolute() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
632 //it's absolute if it has a leading separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
633 return (separators & HAS_LEADING) !is 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
634 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
635 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
636 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
637 * @see IPath#isEmpty |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
638 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
639 public bool isEmpty() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
640 //true if no segments and no leading prefix |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
641 return segments_.length is 0 && ((separators & ALL_SEPARATORS) !is HAS_LEADING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
642 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
643 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
644 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
645 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
646 * @see IPath#isPrefixOf |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
647 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
648 public bool isPrefixOf(IPath anotherPath) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
649 if (device is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
650 if (anotherPath.getDevice() !is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
651 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
652 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
653 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
654 if (!device.equalsIgnoreCase(anotherPath.getDevice())) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
655 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
656 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
657 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
658 if (isEmpty() || (isRoot() && anotherPath.isAbsolute())) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
659 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
660 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
661 int len = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
662 if (len > anotherPath.segmentCount()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
663 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
664 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
665 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
666 if (!segments_[i].equals(anotherPath.segment(i))) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
667 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
668 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
669 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
670 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
671 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
672 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
673 * @see IPath#isRoot |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
674 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
675 public bool isRoot() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
676 //must have no segments, a leading separator, and not be a UNC path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
677 return this is ROOT || (segments_.length is 0 && ((separators & ALL_SEPARATORS) is HAS_LEADING)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
678 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
679 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
680 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
681 * @see IPath#isUNC |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
682 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
683 public bool isUNC() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
684 if (device !is null) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
685 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
686 return (separators & IS_UNC) !is 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
687 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
688 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
689 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
690 * @see IPath#isValidPath(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
691 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
692 public bool isValidPath(String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
693 Path test = new Path(path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
694 for (int i = 0, max = test.segmentCount(); i < max; i++) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
695 if (!isValidSegment(test.segment(i))) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
696 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
697 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
698 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
699 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
700 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
701 * @see IPath#isValidSegment(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
702 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
703 public bool isValidSegment(String segment) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
704 int size = segment.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
705 if (size is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
706 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
707 for (int i = 0; i < size; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
708 char c = segment.charAt(i); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
709 if (c is '/') |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
710 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
711 if (WINDOWS && (c is '\\' || c is ':')) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
712 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
713 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
714 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
715 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
716 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
717 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
718 * @see IPath#lastSegment() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
719 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
720 public String lastSegment() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
721 int len = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
722 return len is 0 ? null : segments_[len - 1]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
723 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
724 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
725 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
726 * @see IPath#makeAbsolute() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
727 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
728 public IPath makeAbsolute() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
729 if (isAbsolute()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
730 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
731 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
732 Path result = new Path(device, segments_, separators | HAS_LEADING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
733 //may need canonicalizing if it has leading ".." or "." segments |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
734 if (result.segmentCount() > 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
735 String first = result.segment(0); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
736 if (first.equals("..") || first.equals(".")) { //$NON-NLS-1$ //$NON-NLS-2$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
737 result.canonicalize(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
738 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
739 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
740 return result; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
741 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
742 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
743 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
744 * @see IPath#makeRelative() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
745 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
746 public IPath makeRelative() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
747 if (!isAbsolute()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
748 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
749 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
750 return new Path(device, segments_, separators & HAS_TRAILING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
751 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
752 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
753 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
754 * @see IPath#makeUNC(bool) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
755 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
756 public IPath makeUNC(bool toUNC) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
757 // if we are already in the right form then just return |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
758 if (!(toUNC ^ isUNC())) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
759 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
760 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
761 int newSeparators = this.separators; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
762 if (toUNC) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
763 newSeparators |= HAS_LEADING | IS_UNC; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
764 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
765 //mask out the UNC bit |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
766 newSeparators &= HAS_LEADING | HAS_TRAILING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
767 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
768 return new Path(toUNC ? null : device, segments_, newSeparators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
769 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
770 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
771 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
772 * @see IPath#matchingFirstSegments(IPath) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
773 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
774 public int matchingFirstSegments(IPath anotherPath) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
775 Assert.isNotNull( cast(Object) anotherPath); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
776 int anotherPathLen = anotherPath.segmentCount(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
777 int max = Math.min(segments_.length, anotherPathLen); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
778 int count = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
779 for (int i = 0; i < max; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
780 if (!segments_[i].equals(anotherPath.segment(i))) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
781 return count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
782 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
783 count++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
784 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
785 return count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
786 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
787 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
788 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
789 * @see IPath#removeFileExtension() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
790 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
791 public IPath removeFileExtension() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
792 String extension = getFileExtension(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
793 if (extension is null || extension.equals("")) { //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
794 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
795 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
796 String lastSegment = lastSegment(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
797 int index = lastSegment.lastIndexOf(extension) - 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
798 return removeLastSegments(1).append(lastSegment.substring(0, index)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
799 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
800 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
801 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
802 * @see IPath#removeFirstSegments(int) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
803 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
804 public IPath removeFirstSegments(int count) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
805 if (count is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
806 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
807 if (count >= segments_.length) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
808 return new Path(device, NO_SEGMENTS, 0); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
809 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
810 Assert.isLegal(count > 0); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
811 int newSize = segments_.length - count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
812 String[] newSegments = new String[newSize]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
813 System.arraycopy(this.segments_, count, newSegments, 0, newSize); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
814 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
815 //result is always a relative path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
816 return new Path(device, newSegments, separators & HAS_TRAILING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
817 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
818 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
819 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
820 * @see IPath#removeLastSegments(int) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
821 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
822 public IPath removeLastSegments(int count) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
823 if (count is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
824 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
825 if (count >= segments_.length) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
826 //result will have no trailing separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
827 return new Path(device, NO_SEGMENTS, separators & (HAS_LEADING | IS_UNC)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
828 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
829 Assert.isLegal(count > 0); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
830 int newSize = segments_.length - count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
831 String[] newSegments = new String[newSize]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
832 System.arraycopy(this.segments_, 0, newSegments, 0, newSize); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
833 return new Path(device, newSegments, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
834 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
835 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
836 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
837 * @see IPath#removeTrailingSeparator() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
838 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
839 public IPath removeTrailingSeparator() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
840 if (!hasTrailingSeparator()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
841 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
842 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
843 return new Path(device, segments_, separators & (HAS_LEADING | IS_UNC)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
844 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
845 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
846 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
847 * @see IPath#segment(int) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
848 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
849 public String segment(int index) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
850 if (index >= segments_.length) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
851 return null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
852 return segments_[index]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
853 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
854 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
855 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
856 * @see IPath#segmentCount() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
857 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
858 public int segmentCount() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
859 return segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
860 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
861 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
862 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
863 * @see IPath#segments() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
864 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
865 public String[] segments() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
866 String[] segmentCopy = new String[](segments_.length); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
867 System.arraycopy(segments_, 0, segmentCopy, 0, segments_.length); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
868 return segmentCopy; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
869 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
870 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
871 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
872 * @see IPath#setDevice(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
873 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
874 public IPath setDevice(String value) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
875 if (value !is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
876 Assert.isTrue(value.indexOf(IPath.DEVICE_SEPARATOR) is (value.length - 1), "Last character should be the device separator"); //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
877 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
878 //return the receiver if the device is the same |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
879 if (value is device || (value !is null && value.equals(device))) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
880 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
881 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
882 return new Path(value, segments_, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
883 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
884 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
885 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
886 * @see IPath#toFile() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
887 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
888 public FilePath toFile() { |
97
0168c579a3f9
Fix path handling, thanks yidabu for reporting.
Frank Benoit <benoit@tionex.de>
parents:
95
diff
changeset
|
889 return new FilePath(tango.io.Path.standard(toOSString())); |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
890 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
891 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
892 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
893 * @see IPath#toOSString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
894 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
895 public String toOSString() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
896 //Note that this method is identical to toString except |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
897 //it uses the OS file separator instead of the path separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
898 int resultSize = computeLength(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
899 if (resultSize <= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
900 return EMPTY_STRING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
901 char FILE_SEPARATOR = FileConst.PathSeparatorChar; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
902 char[] result = new char[resultSize]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
903 int offset = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
904 if (device !is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
905 int size = device.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
906 device.getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
907 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
908 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
909 if ((separators & HAS_LEADING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
910 result[offset++] = FILE_SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
911 if ((separators & IS_UNC) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
912 result[offset++] = FILE_SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
913 int len = segments_.length - 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
914 if (len >= 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
915 //append all but the last segment, with separators |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
916 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
917 int size = segments_[i].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
918 segments_[i].getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
919 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
920 result[offset++] = FILE_SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
921 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
922 //append the last segment |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
923 int size = segments_[len].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
924 segments_[len].getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
925 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
926 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
927 if ((separators & HAS_TRAILING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
928 result[offset++] = FILE_SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
929 return result; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
930 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
931 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
932 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
933 * @see IPath#toPortableString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
934 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
935 public String toPortableString() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
936 int resultSize = computeLength(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
937 if (resultSize <= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
938 return EMPTY_STRING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
939 StringBuffer result = new StringBuffer(resultSize); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
940 if (device !is null) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
941 result.append(device); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
942 if ((separators & HAS_LEADING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
943 result.append(SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
944 if ((separators & IS_UNC) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
945 result.append(SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
946 int len = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
947 //append all segments with separators |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
948 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
949 if (segments_[i].indexOf(DEVICE_SEPARATOR) >= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
950 encodeSegment(segments_[i], result); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
951 else |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
952 result.append(segments_[i]); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
953 if (i < len - 1 || (separators & HAS_TRAILING) !is 0) |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
954 result.append(SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
955 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
956 return result.toString(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
957 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
958 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
959 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
960 * @see IPath#toString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
961 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
3
diff
changeset
|
962 public override String toString() { |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
963 int resultSize = computeLength(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
964 if (resultSize <= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
965 return EMPTY_STRING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
966 char[] result = new char[resultSize]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
967 int offset = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
968 if (device !is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
969 int size = device.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
970 device.getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
971 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
972 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
973 if ((separators & HAS_LEADING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
974 result[offset++] = SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
975 if ((separators & IS_UNC) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
976 result[offset++] = SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
977 int len = segments_.length - 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
978 if (len >= 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
979 //append all but the last segment, with separators |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
980 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
981 int size = segments_[i].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
982 segments_[i].getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
983 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
984 result[offset++] = SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
985 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
986 //append the last segment |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
987 int size = segments_[len].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
988 segments_[len].getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
989 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
990 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
991 if ((separators & HAS_TRAILING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
992 result[offset++] = SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
993 return result; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
994 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
995 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
996 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
997 * @see IPath#uptoSegment(int) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
998 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
999 public IPath uptoSegment(int count) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1000 if (count is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1001 return new Path(device, NO_SEGMENTS, separators & (HAS_LEADING | IS_UNC)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1002 if (count >= segments_.length) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1003 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1004 Assert.isTrue(count > 0, "Invalid parameter to Path.uptoSegment"); //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1005 String[] newSegments = new String[count]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1006 System.arraycopy(segments_, 0, newSegments, 0, count); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1007 return new Path(device, newSegments, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1008 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1009 } |