### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.core.tests.model
Index: src/org/eclipse/jdt/core/tests/model/AttachSourceTests.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AttachSourceTests.java,v
retrieving revision 1.60
diff -u -r1.60 AttachSourceTests.java
--- src/org/eclipse/jdt/core/tests/model/AttachSourceTests.java 22 Jun 2009 13:48:28 -0000 1.60
+++ src/org/eclipse/jdt/core/tests/model/AttachSourceTests.java 24 Jun 2009 09:50:40 -0000
@@ -24,6 +24,7 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.*;
import org.eclipse.jdt.core.dom.*;
+import org.eclipse.jdt.core.model.SourceRange;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
import org.eclipse.jdt.internal.core.JarPackageFragmentRoot;
import org.eclipse.jdt.internal.core.util.Util;
@@ -1470,4 +1471,19 @@
attachSource(root, null, null); // detach source
root.close();
}
+
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=88265
+// Test to ensure availability and correctness of API SourceRange
+public void test88265 () {
+ org.eclipse.jdt.core.model.SourceRange one = new org.eclipse.jdt.core.model.SourceRange(10, 7);
+ org.eclipse.jdt.core.model.SourceRange two = new org.eclipse.jdt.core.model.SourceRange(9, 13);
+ assertTrue(two.getOffset() == 9);
+ assertTrue(two.getLength() == 13);
+ assertFalse(one.equals(two));
+ SourceRange three = new org.eclipse.jdt.core.model.SourceRange(10, 7);
+ assertTrue(one.equals(three));
+ assertTrue(SourceRange.isAvailable(one));
+ assertFalse(SourceRange.isAvailable(null));
+ assertFalse(SourceRange.isAvailable(new SourceRange(-1, 0)));
+}
}
Index: src/org/eclipse/jdt/core/tests/dom/ASTNodeFinderTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTNodeFinderTest.java,v
retrieving revision 1.3
diff -u -r1.3 ASTNodeFinderTest.java
--- src/org/eclipse/jdt/core/tests/dom/ASTNodeFinderTest.java 16 Oct 2008 16:22:23 -0000 1.3
+++ src/org/eclipse/jdt/core/tests/dom/ASTNodeFinderTest.java 24 Jun 2009 09:50:40 -0000
@@ -19,7 +19,7 @@
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.NodeFinder;
-import org.eclipse.jdt.internal.core.SourceRange;
+import org.eclipse.jdt.core.model.SourceRange;
public class ASTNodeFinderTest extends ConverterTestSetup {
#P org.eclipse.jdt.core
Index: model/org/eclipse/jdt/core/ISourceRange.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ISourceRange.java,v
retrieving revision 1.13
diff -u -r1.13 ISourceRange.java
--- model/org/eclipse/jdt/core/ISourceRange.java 27 Jun 2008 16:04:01 -0000 1.13
+++ model/org/eclipse/jdt/core/ISourceRange.java 24 Jun 2009 09:50:43 -0000
@@ -28,10 +28,12 @@
int getLength();
/**
* Returns the 0-based index of the first character of the source code for this element,
- * relative to the source buffer in which this element is contained.
+ * relative to the source buffer in which this element is contained. However, if the element
+ * has no associated source code, an implementation may return -1.
*
* @return the 0-based index of the first character of the source code for this element,
- * relative to the source buffer in which this element is contained
+ * relative to the source buffer in which this element is contained. However, if the element
+ * has no associated source code, an implementation may return -1.
*/
int getOffset();
}
Index: model/org/eclipse/jdt/internal/core/SourceRefElementInfo.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceRefElementInfo.java,v
retrieving revision 1.15
diff -u -r1.15 SourceRefElementInfo.java
--- model/org/eclipse/jdt/internal/core/SourceRefElementInfo.java 7 Mar 2009 01:08:08 -0000 1.15
+++ model/org/eclipse/jdt/internal/core/SourceRefElementInfo.java 24 Jun 2009 09:50:44 -0000
@@ -11,6 +11,7 @@
package org.eclipse.jdt.internal.core;
import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.model.SourceRange;
/**
* Element info for ISourceReference elements.
Index: model/org/eclipse/jdt/internal/core/Member.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Member.java,v
retrieving revision 1.52
diff -u -r1.52 Member.java
--- model/org/eclipse/jdt/internal/core/Member.java 7 Mar 2009 00:58:57 -0000 1.52
+++ model/org/eclipse/jdt/internal/core/Member.java 24 Jun 2009 09:50:43 -0000
@@ -18,6 +18,7 @@
import org.eclipse.jdt.core.compiler.IScanner;
import org.eclipse.jdt.core.compiler.ITerminalSymbols;
import org.eclipse.jdt.core.compiler.InvalidInputException;
+import org.eclipse.jdt.core.model.SourceRange;
import org.eclipse.jdt.internal.compiler.impl.Constant;
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
import org.eclipse.jdt.internal.core.util.MementoTokenizer;
Index: model/org/eclipse/jdt/internal/core/SourceRange.java
===================================================================
RCS file: model/org/eclipse/jdt/internal/core/SourceRange.java
diff -N model/org/eclipse/jdt/internal/core/SourceRange.java
--- model/org/eclipse/jdt/internal/core/SourceRange.java 6 Oct 2006 18:49:08 -0000 1.20
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.core;
-
-import org.eclipse.jdt.core.ISourceRange;
-
-/**
- * @see ISourceRange
- */
-public class SourceRange implements ISourceRange {
-
-protected int offset, length;
-
-public SourceRange(int offset, int length) {
- this.offset = offset;
- this.length = length;
-}
-/*
- * @see Object#equals(Object)
- */
-public boolean equals(Object obj) {
- if (!(obj instanceof ISourceRange))
- return false;
- ISourceRange sourceRange = (ISourceRange) obj;
- return sourceRange.getOffset() == this.offset && sourceRange.getLength() == this.length;
-}
-/**
- * @see ISourceRange
- */
-public int getLength() {
- return this.length;
-}
-/**
- * @see ISourceRange
- */
-public int getOffset() {
- return this.offset;
-}
-/*
- * @see Object#hashCode()
- */
-public int hashCode() {
- return this.length ^ this.offset;
-}
-public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append("[offset="); //$NON-NLS-1$
- buffer.append(this.offset);
- buffer.append(", length="); //$NON-NLS-1$
- buffer.append(this.length);
- buffer.append("]"); //$NON-NLS-1$
- return buffer.toString();
-}
-}
Index: model/org/eclipse/jdt/internal/core/ClassFile.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFile.java,v
retrieving revision 1.144
diff -u -r1.144 ClassFile.java
--- model/org/eclipse/jdt/internal/core/ClassFile.java 10 Oct 2008 07:28:57 -0000 1.144
+++ model/org/eclipse/jdt/internal/core/ClassFile.java 24 Jun 2009 09:50:43 -0000
@@ -27,6 +27,7 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.*;
import org.eclipse.jdt.core.compiler.IProblem;
+import org.eclipse.jdt.core.model.SourceRange;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
import org.eclipse.jdt.internal.compiler.env.IBinaryType;
@@ -445,8 +446,8 @@
SourceRange range = mapper.getSourceRange(classFile.getType());
if (range == SourceMapper.UNKNOWN_RANGE) continue;
- int newStart = range.offset;
- int newEnd = newStart + range.length - 1;
+ int newStart = range.getOffset();
+ int newEnd = newStart + range.getLength() - 1;
if(newStart > start && newEnd < end
&& newStart <= position && newEnd >= position) {
type = classFile.getType();
Index: model/org/eclipse/jdt/internal/core/SourceMapper.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceMapper.java,v
retrieving revision 1.140
diff -u -r1.140 SourceMapper.java
--- model/org/eclipse/jdt/internal/core/SourceMapper.java 22 Jun 2009 13:48:27 -0000 1.140
+++ model/org/eclipse/jdt/internal/core/SourceMapper.java 24 Jun 2009 09:50:44 -0000
@@ -49,6 +49,7 @@
import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.compiler.CategorizedProblem;
import org.eclipse.jdt.core.compiler.CharOperation;
+import org.eclipse.jdt.core.model.SourceRange;
import org.eclipse.jdt.internal.compiler.IProblemFactory;
import org.eclipse.jdt.internal.compiler.ISourceElementRequestor;
import org.eclipse.jdt.internal.compiler.SourceElementParser;
Index: model/org/eclipse/jdt/internal/core/ImportContainer.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ImportContainer.java,v
retrieving revision 1.37
diff -u -r1.37 ImportContainer.java
--- model/org/eclipse/jdt/internal/core/ImportContainer.java 27 Jun 2008 16:03:50 -0000 1.37
+++ model/org/eclipse/jdt/internal/core/ImportContainer.java 24 Jun 2009 09:50:43 -0000
@@ -11,12 +11,7 @@
package org.eclipse.jdt.internal.core;
import org.eclipse.jdt.core.*;
-import org.eclipse.jdt.core.IImportContainer;
-import org.eclipse.jdt.core.IImportDeclaration;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.ISourceRange;
-import org.eclipse.jdt.core.ISourceReference;
-import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.model.SourceRange;
import org.eclipse.jdt.internal.core.util.MementoTokenizer;
/**
Index: model/org/eclipse/jdt/internal/core/LocalVariable.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/LocalVariable.java,v
retrieving revision 1.29
diff -u -r1.29 LocalVariable.java
--- model/org/eclipse/jdt/internal/core/LocalVariable.java 21 Aug 2008 10:15:27 -0000 1.29
+++ model/org/eclipse/jdt/internal/core/LocalVariable.java 24 Jun 2009 09:50:43 -0000
@@ -17,6 +17,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.*;
import org.eclipse.jdt.core.compiler.CharOperation;
+import org.eclipse.jdt.core.model.SourceRange;
import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer;
import org.eclipse.jdt.internal.compiler.ast.ClassLiteralAccess;
import org.eclipse.jdt.internal.compiler.ast.Expression;
Index: model/org/eclipse/jdt/internal/core/TypeParameter.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/TypeParameter.java,v
retrieving revision 1.13
diff -u -r1.13 TypeParameter.java
--- model/org/eclipse/jdt/internal/core/TypeParameter.java 27 Jun 2008 16:03:50 -0000 1.13
+++ model/org/eclipse/jdt/internal/core/TypeParameter.java 24 Jun 2009 09:50:44 -0000
@@ -11,10 +11,8 @@
package org.eclipse.jdt.internal.core;
import org.eclipse.jdt.core.*;
-import org.eclipse.jdt.core.IMember;
-import org.eclipse.jdt.core.ITypeParameter;
-import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.compiler.CharOperation;
+import org.eclipse.jdt.core.model.SourceRange;
public class TypeParameter extends SourceRefElement implements ITypeParameter {
Index: model/org/eclipse/jdt/internal/core/Annotation.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/Annotation.java,v
retrieving revision 1.6
diff -u -r1.6 Annotation.java
--- model/org/eclipse/jdt/internal/core/Annotation.java 8 Apr 2009 22:52:54 -0000 1.6
+++ model/org/eclipse/jdt/internal/core/Annotation.java 24 Jun 2009 09:50:43 -0000
@@ -16,6 +16,7 @@
import org.eclipse.jdt.core.IMemberValuePair;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.model.SourceRange;
import org.eclipse.jdt.internal.compiler.env.IBinaryAnnotation;
import org.eclipse.jdt.internal.compiler.env.IBinaryElementValuePair;
import org.eclipse.jdt.internal.core.util.Util;
Index: model/org/eclipse/jdt/internal/core/CompilationUnitElementInfo.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnitElementInfo.java,v
retrieving revision 1.17
diff -u -r1.17 CompilationUnitElementInfo.java
--- model/org/eclipse/jdt/internal/core/CompilationUnitElementInfo.java 27 Jun 2008 16:03:51 -0000 1.17
+++ model/org/eclipse/jdt/internal/core/CompilationUnitElementInfo.java 24 Jun 2009 09:50:43 -0000
@@ -11,6 +11,7 @@
package org.eclipse.jdt.internal.core;
import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.model.SourceRange;
public class CompilationUnitElementInfo extends OpenableElementInfo {
Index: META-INF/MANIFEST.MF
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/META-INF/MANIFEST.MF,v
retrieving revision 1.34
diff -u -r1.34 MANIFEST.MF
--- META-INF/MANIFEST.MF 22 Jun 2009 13:04:49 -0000 1.34
+++ META-INF/MANIFEST.MF 24 Jun 2009 09:50:43 -0000
@@ -15,6 +15,7 @@
org.eclipse.jdt.core.eval,
org.eclipse.jdt.core.formatter,
org.eclipse.jdt.core.jdom,
+ org.eclipse.jdt.core.model,
org.eclipse.jdt.core.search,
org.eclipse.jdt.core.util,
org.eclipse.jdt.internal.codeassist;x-internal:=true,
Index: model/org/eclipse/jdt/core/model/SourceRange.java
===================================================================
RCS file: model/org/eclipse/jdt/core/model/SourceRange.java
diff -N model/org/eclipse/jdt/core/model/SourceRange.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ model/org/eclipse/jdt/core/model/SourceRange.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.core.model;
+
+import org.eclipse.jdt.core.ISourceRange;
+
+/**
+ * @see ISourceRange
+ * @since 3.6
+ */
+public class SourceRange implements ISourceRange {
+
+protected int offset, length;
+
+public SourceRange(int offset, int length) {
+ this.offset = offset;
+ this.length = length;
+}
+/*
+ * @see Object#equals(Object)
+ */
+public boolean equals(Object obj) {
+ if (!(obj instanceof ISourceRange))
+ return false;
+ ISourceRange sourceRange = (ISourceRange) obj;
+ return sourceRange.getOffset() == this.offset && sourceRange.getLength() == this.length;
+}
+/**
+ * @see ISourceRange
+ */
+public int getLength() {
+ return this.length;
+}
+/**
+ * @see ISourceRange
+ */
+public int getOffset() {
+ return this.offset;
+}
+/*
+ * @see Object#hashCode()
+ */
+public int hashCode() {
+ return this.length ^ this.offset;
+}
+
+/**
+ * Helper method that answers whether a valid source range is available
+ * in the given ISourceRange. When an element has no associated source
+ * code, Java Model APIs may return either null
or a range of
+ * [-1, 0] to indicate an invalid range. This utility method can be used
+ * to detect that case.
+ *
+ * @param range a source range, can be null
+ * @return true
iff range is not null and range.getOffset() is not -1
+ */
+public static boolean isAvailable(ISourceRange range) {
+ return range != null && range.getOffset() != -1;
+}
+
+public String toString() {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("[offset="); //$NON-NLS-1$
+ buffer.append(this.offset);
+ buffer.append(", length="); //$NON-NLS-1$
+ buffer.append(this.length);
+ buffer.append("]"); //$NON-NLS-1$
+ return buffer.toString();
+}
+}