View | Details | Raw Unified | Return to bug 88265 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jdt/core/tests/model/AttachSourceTests.java (+16 lines)
Lines 24-29 Link Here
24
import org.eclipse.core.runtime.Path;
24
import org.eclipse.core.runtime.Path;
25
import org.eclipse.jdt.core.*;
25
import org.eclipse.jdt.core.*;
26
import org.eclipse.jdt.core.dom.*;
26
import org.eclipse.jdt.core.dom.*;
27
import org.eclipse.jdt.core.model.SourceRange;
27
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
28
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
28
import org.eclipse.jdt.internal.core.JarPackageFragmentRoot;
29
import org.eclipse.jdt.internal.core.JarPackageFragmentRoot;
29
import org.eclipse.jdt.internal.core.util.Util;
30
import org.eclipse.jdt.internal.core.util.Util;
Lines 1470-1473 Link Here
1470
	attachSource(root, null, null); // detach source
1471
	attachSource(root, null, null); // detach source
1471
	root.close();
1472
	root.close();
1472
}
1473
}
1474
1475
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=88265
1476
// Test to ensure availability and correctness of API SourceRange
1477
public void test88265 () {
1478
	org.eclipse.jdt.core.model.SourceRange one = new org.eclipse.jdt.core.model.SourceRange(10, 7);
1479
	org.eclipse.jdt.core.model.SourceRange two = new org.eclipse.jdt.core.model.SourceRange(9, 13);
1480
	assertTrue(two.getOffset() == 9);
1481
	assertTrue(two.getLength() == 13);
1482
	assertFalse(one.equals(two));
1483
	SourceRange three = new org.eclipse.jdt.core.model.SourceRange(10, 7);
1484
	assertTrue(one.equals(three));
1485
	assertTrue(SourceRange.isAvailable(one));
1486
	assertFalse(SourceRange.isAvailable(null));
1487
	assertFalse(SourceRange.isAvailable(new SourceRange(-1, 0)));
1488
}
1473
}
1489
}
(-)src/org/eclipse/jdt/core/tests/dom/ASTNodeFinderTest.java (-1 / +1 lines)
Lines 19-25 Link Here
19
import org.eclipse.jdt.core.dom.AST;
19
import org.eclipse.jdt.core.dom.AST;
20
import org.eclipse.jdt.core.dom.ASTNode;
20
import org.eclipse.jdt.core.dom.ASTNode;
21
import org.eclipse.jdt.core.dom.NodeFinder;
21
import org.eclipse.jdt.core.dom.NodeFinder;
22
import org.eclipse.jdt.internal.core.SourceRange;
22
import org.eclipse.jdt.core.model.SourceRange;
23
23
24
public class ASTNodeFinderTest extends ConverterTestSetup {
24
public class ASTNodeFinderTest extends ConverterTestSetup {
25
25
(-)model/org/eclipse/jdt/core/ISourceRange.java (-2 / +4 lines)
Lines 28-37 Link Here
28
int getLength();
28
int getLength();
29
/**
29
/**
30
 * Returns the 0-based index of the first character of the source code for this element,
30
 * Returns the 0-based index of the first character of the source code for this element,
31
 * relative to the source buffer in which this element is contained.
31
 * relative to the source buffer in which this element is contained. However, if the element
32
 * has no associated source code, an implementation may return -1. 
32
 *
33
 *
33
 * @return the 0-based index of the first character of the source code for this element,
34
 * @return the 0-based index of the first character of the source code for this element,
34
 * relative to the source buffer in which this element is contained
35
 * relative to the source buffer in which this element is contained. However, if the element
36
 * has no associated source code, an implementation may return -1. 
35
 */
37
 */
36
int getOffset();
38
int getOffset();
37
}
39
}
(-)model/org/eclipse/jdt/internal/core/SourceRefElementInfo.java (+1 lines)
Lines 11-16 Link Here
11
package org.eclipse.jdt.internal.core;
11
package org.eclipse.jdt.internal.core;
12
12
13
import org.eclipse.jdt.core.ISourceRange;
13
import org.eclipse.jdt.core.ISourceRange;
14
import org.eclipse.jdt.core.model.SourceRange;
14
15
15
/**
16
/**
16
 * Element info for ISourceReference elements.
17
 * Element info for ISourceReference elements.
(-)model/org/eclipse/jdt/internal/core/Member.java (+1 lines)
Lines 18-23 Link Here
18
import org.eclipse.jdt.core.compiler.IScanner;
18
import org.eclipse.jdt.core.compiler.IScanner;
19
import org.eclipse.jdt.core.compiler.ITerminalSymbols;
19
import org.eclipse.jdt.core.compiler.ITerminalSymbols;
20
import org.eclipse.jdt.core.compiler.InvalidInputException;
20
import org.eclipse.jdt.core.compiler.InvalidInputException;
21
import org.eclipse.jdt.core.model.SourceRange;
21
import org.eclipse.jdt.internal.compiler.impl.Constant;
22
import org.eclipse.jdt.internal.compiler.impl.Constant;
22
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
23
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
23
import org.eclipse.jdt.internal.core.util.MementoTokenizer;
24
import org.eclipse.jdt.internal.core.util.MementoTokenizer;
(-)model/org/eclipse/jdt/internal/core/SourceRange.java (-62 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2006 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.jdt.internal.core;
12
13
import org.eclipse.jdt.core.ISourceRange;
14
15
/**
16
 * @see ISourceRange
17
 */
18
public class SourceRange implements ISourceRange {
19
20
protected int offset, length;
21
22
public SourceRange(int offset, int length) {
23
	this.offset = offset;
24
	this.length = length;
25
}
26
/*
27
 * @see Object#equals(Object)
28
 */
29
public boolean equals(Object obj) {
30
	if (!(obj instanceof ISourceRange))
31
        return false;
32
	ISourceRange sourceRange = (ISourceRange) obj;
33
    return sourceRange.getOffset() == this.offset && sourceRange.getLength() == this.length;
34
}
35
/**
36
 * @see ISourceRange
37
 */
38
public int getLength() {
39
	return this.length;
40
}
41
/**
42
 * @see ISourceRange
43
 */
44
public int getOffset() {
45
	return this.offset;
46
}
47
/*
48
 * @see Object#hashCode()
49
 */
50
public int hashCode() {
51
    return this.length ^ this.offset;
52
}
53
public String toString() {
54
	StringBuffer buffer = new StringBuffer();
55
	buffer.append("[offset="); //$NON-NLS-1$
56
	buffer.append(this.offset);
57
	buffer.append(", length="); //$NON-NLS-1$
58
	buffer.append(this.length);
59
	buffer.append("]"); //$NON-NLS-1$
60
	return buffer.toString();
61
}
62
}
(-)model/org/eclipse/jdt/internal/core/ClassFile.java (-2 / +3 lines)
Lines 27-32 Link Here
27
import org.eclipse.core.runtime.Path;
27
import org.eclipse.core.runtime.Path;
28
import org.eclipse.jdt.core.*;
28
import org.eclipse.jdt.core.*;
29
import org.eclipse.jdt.core.compiler.IProblem;
29
import org.eclipse.jdt.core.compiler.IProblem;
30
import org.eclipse.jdt.core.model.SourceRange;
30
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
31
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
31
import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
32
import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
32
import org.eclipse.jdt.internal.compiler.env.IBinaryType;
33
import org.eclipse.jdt.internal.compiler.env.IBinaryType;
Lines 445-452 Link Here
445
446
446
				SourceRange range = mapper.getSourceRange(classFile.getType());
447
				SourceRange range = mapper.getSourceRange(classFile.getType());
447
				if (range == SourceMapper.UNKNOWN_RANGE) continue;
448
				if (range == SourceMapper.UNKNOWN_RANGE) continue;
448
				int newStart = range.offset;
449
				int newStart = range.getOffset();
449
				int newEnd = newStart + range.length - 1;
450
				int newEnd = newStart + range.getLength() - 1;
450
				if(newStart > start && newEnd < end
451
				if(newStart > start && newEnd < end
451
						&& newStart <= position && newEnd >= position) {
452
						&& newStart <= position && newEnd >= position) {
452
					type = classFile.getType();
453
					type = classFile.getType();
(-)model/org/eclipse/jdt/internal/core/SourceMapper.java (+1 lines)
Lines 49-54 Link Here
49
import org.eclipse.jdt.core.Signature;
49
import org.eclipse.jdt.core.Signature;
50
import org.eclipse.jdt.core.compiler.CategorizedProblem;
50
import org.eclipse.jdt.core.compiler.CategorizedProblem;
51
import org.eclipse.jdt.core.compiler.CharOperation;
51
import org.eclipse.jdt.core.compiler.CharOperation;
52
import org.eclipse.jdt.core.model.SourceRange;
52
import org.eclipse.jdt.internal.compiler.IProblemFactory;
53
import org.eclipse.jdt.internal.compiler.IProblemFactory;
53
import org.eclipse.jdt.internal.compiler.ISourceElementRequestor;
54
import org.eclipse.jdt.internal.compiler.ISourceElementRequestor;
54
import org.eclipse.jdt.internal.compiler.SourceElementParser;
55
import org.eclipse.jdt.internal.compiler.SourceElementParser;
(-)model/org/eclipse/jdt/internal/core/ImportContainer.java (-6 / +1 lines)
Lines 11-22 Link Here
11
package org.eclipse.jdt.internal.core;
11
package org.eclipse.jdt.internal.core;
12
12
13
import org.eclipse.jdt.core.*;
13
import org.eclipse.jdt.core.*;
14
import org.eclipse.jdt.core.IImportContainer;
14
import org.eclipse.jdt.core.model.SourceRange;
15
import org.eclipse.jdt.core.IImportDeclaration;
16
import org.eclipse.jdt.core.IJavaElement;
17
import org.eclipse.jdt.core.ISourceRange;
18
import org.eclipse.jdt.core.ISourceReference;
19
import org.eclipse.jdt.core.JavaModelException;
20
import org.eclipse.jdt.internal.core.util.MementoTokenizer;
15
import org.eclipse.jdt.internal.core.util.MementoTokenizer;
21
16
22
/**
17
/**
(-)model/org/eclipse/jdt/internal/core/LocalVariable.java (+1 lines)
Lines 17-22 Link Here
17
import org.eclipse.core.runtime.IProgressMonitor;
17
import org.eclipse.core.runtime.IProgressMonitor;
18
import org.eclipse.jdt.core.*;
18
import org.eclipse.jdt.core.*;
19
import org.eclipse.jdt.core.compiler.CharOperation;
19
import org.eclipse.jdt.core.compiler.CharOperation;
20
import org.eclipse.jdt.core.model.SourceRange;
20
import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer;
21
import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer;
21
import org.eclipse.jdt.internal.compiler.ast.ClassLiteralAccess;
22
import org.eclipse.jdt.internal.compiler.ast.ClassLiteralAccess;
22
import org.eclipse.jdt.internal.compiler.ast.Expression;
23
import org.eclipse.jdt.internal.compiler.ast.Expression;
(-)model/org/eclipse/jdt/internal/core/TypeParameter.java (-3 / +1 lines)
Lines 11-20 Link Here
11
package org.eclipse.jdt.internal.core;
11
package org.eclipse.jdt.internal.core;
12
12
13
import org.eclipse.jdt.core.*;
13
import org.eclipse.jdt.core.*;
14
import org.eclipse.jdt.core.IMember;
15
import org.eclipse.jdt.core.ITypeParameter;
16
import org.eclipse.jdt.core.JavaModelException;
17
import org.eclipse.jdt.core.compiler.CharOperation;
14
import org.eclipse.jdt.core.compiler.CharOperation;
15
import org.eclipse.jdt.core.model.SourceRange;
18
16
19
public class TypeParameter extends SourceRefElement implements ITypeParameter {
17
public class TypeParameter extends SourceRefElement implements ITypeParameter {
20
18
(-)model/org/eclipse/jdt/internal/core/Annotation.java (+1 lines)
Lines 16-21 Link Here
16
import org.eclipse.jdt.core.IMemberValuePair;
16
import org.eclipse.jdt.core.IMemberValuePair;
17
import org.eclipse.jdt.core.ISourceRange;
17
import org.eclipse.jdt.core.ISourceRange;
18
import org.eclipse.jdt.core.JavaModelException;
18
import org.eclipse.jdt.core.JavaModelException;
19
import org.eclipse.jdt.core.model.SourceRange;
19
import org.eclipse.jdt.internal.compiler.env.IBinaryAnnotation;
20
import org.eclipse.jdt.internal.compiler.env.IBinaryAnnotation;
20
import org.eclipse.jdt.internal.compiler.env.IBinaryElementValuePair;
21
import org.eclipse.jdt.internal.compiler.env.IBinaryElementValuePair;
21
import org.eclipse.jdt.internal.core.util.Util;
22
import org.eclipse.jdt.internal.core.util.Util;
(-)model/org/eclipse/jdt/internal/core/CompilationUnitElementInfo.java (+1 lines)
Lines 11-16 Link Here
11
package org.eclipse.jdt.internal.core;
11
package org.eclipse.jdt.internal.core;
12
12
13
import org.eclipse.jdt.core.ISourceRange;
13
import org.eclipse.jdt.core.ISourceRange;
14
import org.eclipse.jdt.core.model.SourceRange;
14
15
15
public class CompilationUnitElementInfo extends OpenableElementInfo {
16
public class CompilationUnitElementInfo extends OpenableElementInfo {
16
17
(-)META-INF/MANIFEST.MF (+1 lines)
Lines 15-20 Link Here
15
 org.eclipse.jdt.core.eval,
15
 org.eclipse.jdt.core.eval,
16
 org.eclipse.jdt.core.formatter,
16
 org.eclipse.jdt.core.formatter,
17
 org.eclipse.jdt.core.jdom,
17
 org.eclipse.jdt.core.jdom,
18
 org.eclipse.jdt.core.model,
18
 org.eclipse.jdt.core.search,
19
 org.eclipse.jdt.core.search,
19
 org.eclipse.jdt.core.util,
20
 org.eclipse.jdt.core.util,
20
 org.eclipse.jdt.internal.codeassist;x-internal:=true,
21
 org.eclipse.jdt.internal.codeassist;x-internal:=true,
(-)model/org/eclipse/jdt/core/model/SourceRange.java (+78 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2006 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.jdt.core.model;
12
13
import org.eclipse.jdt.core.ISourceRange;
14
15
/**
16
 * @see ISourceRange
17
 * @since 3.6
18
 */
19
public class SourceRange implements ISourceRange {
20
21
protected int offset, length;
22
23
public SourceRange(int offset, int length) {
24
	this.offset = offset;
25
	this.length = length;
26
}
27
/*
28
 * @see Object#equals(Object)
29
 */
30
public boolean equals(Object obj) {
31
	if (!(obj instanceof ISourceRange))
32
        return false;
33
	ISourceRange sourceRange = (ISourceRange) obj;
34
    return sourceRange.getOffset() == this.offset && sourceRange.getLength() == this.length;
35
}
36
/**
37
 * @see ISourceRange
38
 */
39
public int getLength() {
40
	return this.length;
41
}
42
/**
43
 * @see ISourceRange
44
 */
45
public int getOffset() {
46
	return this.offset;
47
}
48
/*
49
 * @see Object#hashCode()
50
 */
51
public int hashCode() {
52
    return this.length ^ this.offset;
53
}
54
55
/**
56
 * Helper method that answers whether a valid source range is available
57
 * in the given ISourceRange. When an element has no associated source
58
 * code, Java Model APIs may return either <code>null</code> or a range of
59
 * [-1, 0] to indicate an invalid range. This utility method can be used
60
 * to detect that case.
61
 *
62
 * @param range a source range, can be <code>null</code>
63
 * @return <code>true</code> iff range is not null and range.getOffset() is not -1
64
 */
65
public static boolean isAvailable(ISourceRange range) {
66
		return range != null && range.getOffset() != -1;
67
}
68
69
public String toString() {
70
	StringBuffer buffer = new StringBuffer();
71
	buffer.append("[offset="); //$NON-NLS-1$
72
	buffer.append(this.offset);
73
	buffer.append(", length="); //$NON-NLS-1$
74
	buffer.append(this.length);
75
	buffer.append("]"); //$NON-NLS-1$
76
	return buffer.toString();
77
}
78
}

Return to bug 88265