### 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(); +} +}