Copyright (c) 2000, 2015 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
Stephan Herrmann - Contribution for bug 215139
/*******************************************************************************
* Copyright (c) 2000, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Stephan Herrmann - Contribution for bug 215139
*******************************************************************************/
package org.eclipse.jdt.internal.core.search;
import org.eclipse.jdt.core.IAccessRule;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.core.search.TypeNameMatchRequestor;
import org.eclipse.jdt.core.search.TypeNameRequestor;
import org.eclipse.jdt.internal.compiler.env.AccessRestriction;
Wrapper used to link IRestrictedAccessTypeRequestor
with TypeNameRequestor
. This wrapper specifically allows usage of internal method BasicSearchEngine.searchAllTypeNames(char[] packageName, int packageMatchRule, char[] typeName, int typeMatchRule, int searchFor, IJavaSearchScope scope, IRestrictedAccessTypeRequestor nameRequestor, int waitingPolicy, IProgressMonitor monitor)
. from API method SearchEngine.searchAllTypeNames(char[] packageName, int packageMatchRule, char[] typeName, int matchRule, int searchFor, IJavaSearchScope scope, TypeNameRequestor nameRequestor, int waitingPolicy, IProgressMonitor monitor)
. /**
* Wrapper used to link {@link IRestrictedAccessTypeRequestor} with {@link TypeNameRequestor}.
* This wrapper specifically allows usage of internal method {@link BasicSearchEngine#searchAllTypeNames(
* char[] packageName,
* int packageMatchRule,
* char[] typeName,
* int typeMatchRule,
* int searchFor,
* org.eclipse.jdt.core.search.IJavaSearchScope scope,
* IRestrictedAccessTypeRequestor nameRequestor,
* int waitingPolicy,
* org.eclipse.core.runtime.IProgressMonitor monitor) }.
* from API method {@link org.eclipse.jdt.core.search.SearchEngine#searchAllTypeNames(
* char[] packageName,
* int packageMatchRule,
* char[] typeName,
* int matchRule,
* int searchFor,
* org.eclipse.jdt.core.search.IJavaSearchScope scope,
* TypeNameRequestor nameRequestor,
* int waitingPolicy,
* org.eclipse.core.runtime.IProgressMonitor monitor) }.
*/
public class TypeNameMatchRequestorWrapper extends NameMatchRequestorWrapper implements IRestrictedAccessTypeRequestor {
TypeNameMatchRequestor requestor;
public TypeNameMatchRequestorWrapper(TypeNameMatchRequestor requestor, IJavaSearchScope scope) {
super(scope);
this.requestor = requestor;
}
@Override
public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path, AccessRestriction access) {
// Get type
IType type = getType(modifiers, packageName, simpleTypeName, enclosingTypeNames, path, access);
// Accept match if the type has been found
if (type != null) {
// hierarchy scopes require one more check:
if (!(this.scope instanceof HierarchyScope) || ((HierarchyScope)this.scope).enclosesFineGrained(type)) {
// Create the match
final JavaSearchTypeNameMatch match = new JavaSearchTypeNameMatch(type, modifiers);
// Update match accessibility
if(access != null) {
switch (access.getProblemId()) {
case IProblem.ForbiddenReference:
match.setAccessibility(IAccessRule.K_NON_ACCESSIBLE);
break;
case IProblem.DiscouragedReference:
match.setAccessibility(IAccessRule.K_DISCOURAGED);
break;
}
}
// Accept match
this.requestor.acceptTypeNameMatch(match);
}
}
}
}