protected int matchLocalVariable(LocalVariableBinding variable, boolean matchName) { if (variable == null) return INACCURATE_MATCH; if (matchName && !matchesName(this.pattern.name, variable.readableName())) return IMPOSSIBLE_MATCH; return variable.declaration.declarationSourceStart == getLocalVariable().declarationSourceStart ? ACCURATE_MATCH : IMPOSSIBLE_MATCH; } @Override
@Override public int resolveLevel(ASTNode possiblelMatchingNode) { if (this.pattern.findReferences || this.pattern.fineGrain != 0) if (possiblelMatchingNode instanceof NameReference) return resolveLevel((NameReference) possiblelMatchingNode); if (possiblelMatchingNode instanceof LocalDeclaration) return matchLocalVariable(((LocalDeclaration) possiblelMatchingNode).binding, true); return IMPOSSIBLE_MATCH; } @Override
@Override public int resolveLevel(Binding binding) { if (binding == null) return INACCURATE_MATCH; if (!(binding instanceof LocalVariableBinding)) return IMPOSSIBLE_MATCH; return matchLocalVariable((LocalVariableBinding) binding, true); } protected int resolveLevel(NameReference nameRef) {
protected int resolveLevel(NameReference nameRef) { return resolveLevel(nameRef.binding); } }
protected void matchReportReference(ASTNode reference, IJavaElement element, Binding elementBinding, int accuracy, MatchLocator locator) throws CoreException { int offset = -1; int length = -1; if (reference instanceof SingleNameReference) { offset = reference.sourceStart; length = reference.sourceEnd-offset+1; } else if (reference instanceof QualifiedNameReference) { QualifiedNameReference qNameRef = (QualifiedNameReference) reference; long sourcePosition = qNameRef.sourcePositions[0]; offset = (int) (sourcePosition >>> 32); length = ((int) sourcePosition) - offset +1; } else if (reference instanceof LocalDeclaration) { LocalVariable localVariable = getLocalVariable(); offset = localVariable.nameStart; length = localVariable.nameEnd-offset+1; element = localVariable; this.match = locator.newDeclarationMatch(element, null, accuracy, offset, length); locator.report(this.match); return; } if (offset >= 0) { this.match = locator.newLocalVariableReferenceMatch(element, accuracy, offset, length, reference); locator.report(this.match); } } protected int matchContainer() {
public static PatternLocator patternLocator(SearchPattern pattern) { switch (pattern.kind) { case IIndexConstants.PKG_REF_PATTERN : return new PackageReferenceLocator((PackageReferencePattern) pattern); case IIndexConstants.PKG_DECL_PATTERN : return new PackageDeclarationLocator((PackageDeclarationPattern) pattern); case IIndexConstants.TYPE_REF_PATTERN : return new TypeReferenceLocator((TypeReferencePattern) pattern); case IIndexConstants.TYPE_DECL_PATTERN : return new TypeDeclarationLocator((TypeDeclarationPattern) pattern); case IIndexConstants.SUPER_REF_PATTERN : return new SuperTypeReferenceLocator((SuperTypeReferencePattern) pattern); case IIndexConstants.CONSTRUCTOR_PATTERN : return new ConstructorLocator((ConstructorPattern) pattern); case IIndexConstants.FIELD_PATTERN : return new FieldLocator((FieldPattern) pattern); case IIndexConstants.METHOD_PATTERN : return new MethodLocator((MethodPattern) pattern); case IIndexConstants.OR_PATTERN : return new OrLocator((OrPattern) pattern); case IIndexConstants.AND_PATTERN : return new AndLocator((AndPattern) pattern); case IIndexConstants.LOCAL_VAR_PATTERN : return new LocalVariableLocator((LocalVariablePattern) pattern); case IIndexConstants.TYPE_PARAM_PATTERN: return new TypeParameterLocator((TypeParameterPattern) pattern); } return null; } public static char[] qualifiedPattern(char[] simpleNamePattern, char[] qualificationPattern) {
public int resolveLevel(Binding binding) { if (binding == null) return INACCURATE_MATCH; if (!(binding instanceof LocalVariableBinding)) return IMPOSSIBLE_MATCH; return matchLocalVariable((LocalVariableBinding) binding, true); } protected int resolveLevel(NameReference nameRef) {
protected int resolveLevel(NameReference nameRef) { return resolveLevel(nameRef.binding); } }
@Override protected void matchReportReference(ASTNode reference, IJavaElement element, Binding elementBinding, int accuracy, MatchLocator locator) throws CoreException { int offset = -1; int length = -1; if (reference instanceof SingleNameReference) { offset = reference.sourceStart; length = reference.sourceEnd-offset+1; } else if (reference instanceof QualifiedNameReference) { QualifiedNameReference qNameRef = (QualifiedNameReference) reference; long sourcePosition = qNameRef.sourcePositions[0]; offset = (int) (sourcePosition >>> 32); length = ((int) sourcePosition) - offset +1; } else if (reference instanceof LocalDeclaration) { LocalVariable localVariable = getLocalVariable(); offset = localVariable.nameStart; length = localVariable.nameEnd-offset+1; element = localVariable; this.match = locator.newDeclarationMatch(element, null, accuracy, offset, length); locator.report(this.match); return; } if (offset >= 0) { this.match = locator.newLocalVariableReferenceMatch(element, accuracy, offset, length, reference); locator.report(this.match); } } @Override
public static PatternLocator patternLocator(SearchPattern pattern) { switch (pattern.kind) { case IIndexConstants.PKG_REF_PATTERN : return new PackageReferenceLocator((PackageReferencePattern) pattern); case IIndexConstants.PKG_DECL_PATTERN : return new PackageDeclarationLocator((PackageDeclarationPattern) pattern); case IIndexConstants.TYPE_REF_PATTERN : return new TypeReferenceLocator((TypeReferencePattern) pattern); case IIndexConstants.TYPE_DECL_PATTERN : return new TypeDeclarationLocator((TypeDeclarationPattern) pattern); case IIndexConstants.SUPER_REF_PATTERN : return new SuperTypeReferenceLocator((SuperTypeReferencePattern) pattern); case IIndexConstants.CONSTRUCTOR_PATTERN : return new ConstructorLocator((ConstructorPattern) pattern); case IIndexConstants.FIELD_PATTERN : return new FieldLocator((FieldPattern) pattern); case IIndexConstants.METHOD_PATTERN : return new MethodLocator((MethodPattern) pattern); case IIndexConstants.OR_PATTERN : return new OrLocator((OrPattern) pattern); case IIndexConstants.AND_PATTERN : return new AndLocator((AndPattern) pattern); case IIndexConstants.LOCAL_VAR_PATTERN : return new LocalVariableLocator((LocalVariablePattern) pattern); case IIndexConstants.TYPE_PARAM_PATTERN: return new TypeParameterLocator((TypeParameterPattern) pattern); } return null; } public static char[] qualifiedPattern(char[] simpleNamePattern, char[] qualificationPattern) {
public int match(LocalDeclaration node, MatchingNodeSet nodeSet) { int referencesLevel = IMPOSSIBLE_MATCH; if (this.pattern.findReferences) // must be a write only access with an initializer if (this.pattern.writeAccess && !this.pattern.readAccess && node.initialization != null) if (matchesName(this.pattern.name, node.name)) referencesLevel = this.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH; int declarationsLevel = IMPOSSIBLE_MATCH; if (this.pattern.findDeclarations) if (matchesName(this.pattern.name, node.name)) if (node.declarationSourceStart == getLocalVariable().declarationSourceStart) declarationsLevel = this.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH; return nodeSet.addMatch(node, referencesLevel >= declarationsLevel ? referencesLevel : declarationsLevel); // use the stronger match } private LocalVariable getLocalVariable() {
public int resolveLevel(ASTNode possiblelMatchingNode) { if (this.pattern.findReferences || this.pattern.fineGrain != 0) if (possiblelMatchingNode instanceof NameReference) return resolveLevel((NameReference) possiblelMatchingNode); if (possiblelMatchingNode instanceof LocalDeclaration) return matchLocalVariable(((LocalDeclaration) possiblelMatchingNode).binding, true); return IMPOSSIBLE_MATCH; } public int resolveLevel(Binding binding) {
public int resolveLevel(Binding binding) { if (binding == null) return INACCURATE_MATCH; if (!(binding instanceof LocalVariableBinding)) return IMPOSSIBLE_MATCH; return matchLocalVariable((LocalVariableBinding) binding, true); } protected int resolveLevel(NameReference nameRef) {
protected int resolveLevel(NameReference nameRef) { return resolveLevel(nameRef.binding); } }
protected void matchReportReference(ASTNode reference, IJavaElement element, Binding elementBinding, int accuracy, MatchLocator locator) throws CoreException { int offset = -1; int length = -1; if (reference instanceof SingleNameReference) { offset = reference.sourceStart; length = reference.sourceEnd-offset+1; } else if (reference instanceof QualifiedNameReference) { QualifiedNameReference qNameRef = (QualifiedNameReference) reference; long sourcePosition = qNameRef.sourcePositions[0]; offset = (int) (sourcePosition >>> 32); length = ((int) sourcePosition) - offset +1; } else if (reference instanceof LocalDeclaration) { LocalVariable localVariable = getLocalVariable(); offset = localVariable.nameStart; length = localVariable.nameEnd-offset+1; element = localVariable; this.match = locator.newDeclarationMatch(element, null, accuracy, offset, length); locator.report(this.match); return; } if (offset >= 0) { this.match = locator.newLocalVariableReferenceMatch(element, accuracy, offset, length, reference); locator.report(this.match); } } protected int matchContainer() {
public static PatternLocator patternLocator(SearchPattern pattern) { switch (pattern.kind) { case IIndexConstants.PKG_REF_PATTERN : return new PackageReferenceLocator((PackageReferencePattern) pattern); case IIndexConstants.PKG_DECL_PATTERN : return new PackageDeclarationLocator((PackageDeclarationPattern) pattern); case IIndexConstants.TYPE_REF_PATTERN : return new TypeReferenceLocator((TypeReferencePattern) pattern); case IIndexConstants.TYPE_DECL_PATTERN : return new TypeDeclarationLocator((TypeDeclarationPattern) pattern); case IIndexConstants.SUPER_REF_PATTERN : return new SuperTypeReferenceLocator((SuperTypeReferencePattern) pattern); case IIndexConstants.CONSTRUCTOR_PATTERN : return new ConstructorLocator((ConstructorPattern) pattern); case IIndexConstants.FIELD_PATTERN : return new FieldLocator((FieldPattern) pattern); case IIndexConstants.METHOD_PATTERN : return new MethodLocator((MethodPattern) pattern); case IIndexConstants.OR_PATTERN : return new OrLocator((OrPattern) pattern); case IIndexConstants.AND_PATTERN : return new AndLocator((AndPattern) pattern); case IIndexConstants.LOCAL_VAR_PATTERN : return new LocalVariableLocator((LocalVariablePattern) pattern); case IIndexConstants.TYPE_PARAM_PATTERN: return new TypeParameterLocator((TypeParameterPattern) pattern); } return null; } public static char[] qualifiedPattern(char[] simpleNamePattern, char[] qualificationPattern) {
public int match(LocalDeclaration node, MatchingNodeSet nodeSet) { int referencesLevel = IMPOSSIBLE_MATCH; if (this.pattern.findReferences) // must be a write only access with an initializer if (this.pattern.writeAccess && !this.pattern.readAccess && node.initialization != null) if (matchesName(this.pattern.name, node.name)) referencesLevel = this.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH; int declarationsLevel = IMPOSSIBLE_MATCH; if (this.pattern.findDeclarations) if (matchesName(this.pattern.name, node.name)) if (node.declarationSourceStart == getLocalVariable().declarationSourceStart) declarationsLevel = this.pattern.mustResolve ? POSSIBLE_MATCH : ACCURATE_MATCH; return nodeSet.addMatch(node, referencesLevel >= declarationsLevel ? referencesLevel : declarationsLevel); // use the stronger match } private LocalVariable getLocalVariable() {
public int resolveLevel(ASTNode possiblelMatchingNode) { if (this.pattern.findReferences || this.pattern.fineGrain != 0) if (possiblelMatchingNode instanceof NameReference) return resolveLevel((NameReference) possiblelMatchingNode); if (possiblelMatchingNode instanceof LocalDeclaration) return matchLocalVariable(((LocalDeclaration) possiblelMatchingNode).binding, true); return IMPOSSIBLE_MATCH; } public int resolveLevel(Binding binding) {
public int resolveLevel(Binding binding) { if (binding == null) return INACCURATE_MATCH; if (!(binding instanceof LocalVariableBinding)) return IMPOSSIBLE_MATCH; return matchLocalVariable((LocalVariableBinding) binding, true); } protected int resolveLevel(NameReference nameRef) {
protected int resolveLevel(NameReference nameRef) { return resolveLevel(nameRef.binding); } }