Copyright (c) 2000, 2013 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
/******************************************************************************* * Copyright (c) 2000, 2013 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 *******************************************************************************/
package org.eclipse.jdt.internal.core.eval; import java.util.Locale; import java.util.Map; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.*; import org.eclipse.jdt.core.compiler.IProblem; import org.eclipse.jdt.core.eval.ICodeSnippetRequestor; import org.eclipse.jdt.core.eval.IEvaluationContext; import org.eclipse.jdt.core.eval.IGlobalVariable; import org.eclipse.jdt.internal.compiler.IProblemFactory; import org.eclipse.jdt.internal.compiler.env.INameEnvironment; import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; import org.eclipse.jdt.internal.core.*; import org.eclipse.jdt.internal.core.builder.NameEnvironment; import org.eclipse.jdt.internal.core.builder.ProblemFactory; import org.eclipse.jdt.internal.eval.EvaluationContext; import org.eclipse.jdt.internal.eval.GlobalVariable; import org.eclipse.jdt.internal.eval.IRequestor; import org.eclipse.jdt.internal.eval.InstallException;
A wrapper around the infrastructure evaluation context.
/** * A wrapper around the infrastructure evaluation context. */
@SuppressWarnings({"rawtypes", "unchecked"}) public class EvaluationContextWrapper implements IEvaluationContext { protected EvaluationContext context; protected JavaProject project;
Creates a new wrapper around the given infrastructure evaluation context and project.
/** * Creates a new wrapper around the given infrastructure evaluation context * and project. */
public EvaluationContextWrapper(EvaluationContext context, JavaProject project) { this.context = context; this.project = project; }
See Also:
  • allVariables.allVariables()
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#allVariables() */
@Override public IGlobalVariable[] allVariables() { GlobalVariable[] vars = this.context.allVariables(); int length = vars.length; GlobalVariableWrapper[] result = new GlobalVariableWrapper[length]; for (int i = 0; i < length; i++) { result[i] = new GlobalVariableWrapper(vars[i]); } return result; }
Checks to ensure that there is a previously built state.
/** * Checks to ensure that there is a previously built state. */
protected void checkBuilderState() { return; }
See Also:
  • codeComplete.codeComplete(String, int, ICompletionRequestor)
Deprecated:
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#codeComplete(String, int, ICompletionRequestor) * @deprecated */
@Override public void codeComplete(String codeSnippet, int position, ICompletionRequestor requestor) throws JavaModelException { codeComplete(codeSnippet, position, requestor, DefaultWorkingCopyOwner.PRIMARY); }
See Also:
  • codeComplete.codeComplete(String, int, ICompletionRequestor, WorkingCopyOwner)
Deprecated:
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#codeComplete(String, int, ICompletionRequestor, WorkingCopyOwner) * @deprecated */
@Override public void codeComplete(String codeSnippet, int position, ICompletionRequestor requestor, WorkingCopyOwner owner) throws JavaModelException { if (requestor == null) { throw new IllegalArgumentException("Completion requestor cannot be null"); //$NON-NLS-1$ } codeComplete(codeSnippet, position, new org.eclipse.jdt.internal.codeassist.CompletionRequestorWrapper(requestor), owner); }
See Also:
  • codeComplete.codeComplete(String, int, CompletionRequestor)
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#codeComplete(String, int, CompletionRequestor) */
@Override public void codeComplete(String codeSnippet, int position, CompletionRequestor requestor) throws JavaModelException { codeComplete(codeSnippet, position, requestor, DefaultWorkingCopyOwner.PRIMARY); }
See Also:
  • codeComplete.codeComplete(String, int, CompletionRequestor, IProgressMonitor)
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#codeComplete(String, int, CompletionRequestor, IProgressMonitor) */
@Override public void codeComplete(String codeSnippet, int position, CompletionRequestor requestor, IProgressMonitor monitor) throws JavaModelException { codeComplete(codeSnippet, position, requestor, DefaultWorkingCopyOwner.PRIMARY, null); }
See Also:
  • codeComplete.codeComplete(String, int, CompletionRequestor, WorkingCopyOwner)
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#codeComplete(String, int, CompletionRequestor, WorkingCopyOwner) */
@Override public void codeComplete(String codeSnippet, int position, CompletionRequestor requestor, WorkingCopyOwner owner) throws JavaModelException { codeComplete(codeSnippet, position, requestor, owner, null); }
See Also:
  • codeComplete.codeComplete(String, int, CompletionRequestor, WorkingCopyOwner, IProgressMonitor)
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#codeComplete(String, int, CompletionRequestor, WorkingCopyOwner, IProgressMonitor) */
@Override public void codeComplete( String codeSnippet, int position, CompletionRequestor requestor, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException { SearchableEnvironment environment = this.project.newSearchableNameEnvironment(owner); this.context.complete( codeSnippet.toCharArray(), position, environment, requestor, this.project.getOptions(true), this.project, owner, monitor ); }
See Also:
  • codeSelect.codeSelect(String, int, int)
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#codeSelect(String, int, int) */
@Override public IJavaElement[] codeSelect(String codeSnippet, int offset, int length) throws JavaModelException { return codeSelect(codeSnippet, offset, length, DefaultWorkingCopyOwner.PRIMARY); }
See Also:
  • codeSelect.codeSelect(String, int, int, WorkingCopyOwner)
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#codeSelect(String, int, int, WorkingCopyOwner) */
@Override public IJavaElement[] codeSelect(String codeSnippet, int offset, int length, WorkingCopyOwner owner) throws JavaModelException { SearchableEnvironment environment = this.project.newSearchableNameEnvironment(owner); SelectionRequestor requestor= new SelectionRequestor(environment.nameLookup, null); // null because there is no need to look inside the code snippet itself this.context.select( codeSnippet.toCharArray(), offset, offset + length - 1, environment, requestor, this.project.getOptions(true), owner ); return requestor.getElements(); }
See Also:
  • deleteVariable.deleteVariable(IGlobalVariable)
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#deleteVariable(IGlobalVariable) */
@Override public void deleteVariable(IGlobalVariable variable) { if (variable instanceof GlobalVariableWrapper) { GlobalVariableWrapper wrapper = (GlobalVariableWrapper)variable; this.context.deleteVariable(wrapper.variable); } else { throw new Error("Unknown implementation of IGlobalVariable"); //$NON-NLS-1$ } }
See Also:
  • evaluateCodeSnippet.evaluateCodeSnippet(String, String[], String[], int[], IType, boolean, boolean, ICodeSnippetRequestor, IProgressMonitor)
/** * @see IEvaluationContext#evaluateCodeSnippet(String, String[], String[], int[], IType, boolean, boolean, ICodeSnippetRequestor, IProgressMonitor) */
@Override public void evaluateCodeSnippet( String codeSnippet, String[] localVariableTypeNames, String[] localVariableNames, int[] localVariableModifiers, IType declaringType, boolean isStatic, boolean isConstructorCall, ICodeSnippetRequestor requestor, IProgressMonitor progressMonitor) throws org.eclipse.jdt.core.JavaModelException { checkBuilderState(); int length = localVariableTypeNames.length; char[][] varTypeNames = new char[length][]; for (int i = 0; i < length; i++){ varTypeNames[i] = localVariableTypeNames[i].toCharArray(); } length = localVariableNames.length; char[][] varNames = new char[length][]; for (int i = 0; i < length; i++){ varNames[i] = localVariableNames[i].toCharArray(); } Map options = this.project.getOptions(true); // transfer the imports of the IType to the evaluation context if (declaringType != null) { // retrieves the package statement this.context.setPackageName(declaringType.getPackageFragment().getElementName().toCharArray()); ICompilationUnit compilationUnit = declaringType.getCompilationUnit(); if (compilationUnit != null) { // retrieves the import statement IImportDeclaration[] imports = compilationUnit.getImports(); int importsLength = imports.length; if (importsLength != 0) { char[][] importsNames = new char[importsLength][]; for (int i = 0; i < importsLength; i++) { importsNames[i] = imports[i].getElementName().toCharArray(); } this.context.setImports(importsNames); // turn off import complaints for implicitly added ones options.put(CompilerOptions.OPTION_ReportUnusedImport, CompilerOptions.IGNORE); } } else { // try to retrieve imports from the source SourceMapper sourceMapper = ((AbstractClassFile) declaringType.getClassFile()).getSourceMapper(); if (sourceMapper != null) { char[][] imports = sourceMapper.getImports((BinaryType) declaringType); if (imports != null) { this.context.setImports(imports); // turn off import complaints for implicitly added ones options.put(CompilerOptions.OPTION_ReportUnusedImport, CompilerOptions.IGNORE); } } } } INameEnvironment environment = null; try { this.context.evaluate( codeSnippet.toCharArray(), varTypeNames, varNames, localVariableModifiers, declaringType == null? null : declaringType.getFullyQualifiedName().toCharArray(), isStatic, isConstructorCall, environment = getBuildNameEnvironment(), options, getInfrastructureEvaluationRequestor(requestor), getProblemFactory()); } catch (InstallException e) { handleInstallException(e); } finally { if (environment != null) environment.cleanup(); } }
See Also:
  • evaluateCodeSnippet.evaluateCodeSnippet(String, ICodeSnippetRequestor, IProgressMonitor)
/** * @see IEvaluationContext#evaluateCodeSnippet(String, ICodeSnippetRequestor, IProgressMonitor) */
@Override public void evaluateCodeSnippet(String codeSnippet, ICodeSnippetRequestor requestor, IProgressMonitor progressMonitor) throws JavaModelException { checkBuilderState(); INameEnvironment environment = null; try { this.context.evaluate( codeSnippet.toCharArray(), environment = getBuildNameEnvironment(), this.project.getOptions(true), getInfrastructureEvaluationRequestor(requestor), getProblemFactory()); } catch (InstallException e) { handleInstallException(e); } finally { if (environment != null) environment.cleanup(); } }
See Also:
  • evaluateVariable.evaluateVariable(IGlobalVariable, ICodeSnippetRequestor, IProgressMonitor)
/** * @see IEvaluationContext#evaluateVariable(IGlobalVariable, ICodeSnippetRequestor, IProgressMonitor) */
@Override public void evaluateVariable(IGlobalVariable variable, ICodeSnippetRequestor requestor, IProgressMonitor progressMonitor) throws JavaModelException { checkBuilderState(); INameEnvironment environment = null; try { this.context.evaluateVariable( ((GlobalVariableWrapper)variable).variable, environment = getBuildNameEnvironment(), this.project.getOptions(true), getInfrastructureEvaluationRequestor(requestor), getProblemFactory()); } catch (InstallException e) { handleInstallException(e); } finally { if (environment != null) environment.cleanup(); } }
Returns a name environment for the last built state.
/** * Returns a name environment for the last built state. */
protected INameEnvironment getBuildNameEnvironment() { return new NameEnvironment(getProject(), CompilationGroup.TEST); } public char[] getVarClassName() { return this.context.getVarClassName(); }
See Also:
  • getImports.getImports()
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#getImports() */
@Override public String[] getImports() { char[][] imports = this.context.getImports(); int length = imports.length; String[] result = new String[length]; for (int i = 0; i < length; i++) { result[i] = new String(imports[i]); } return result; }
Returns the infrastructure evaluation context.
/** * Returns the infrastructure evaluation context. */
public EvaluationContext getInfrastructureEvaluationContext() { return this.context; }
Returns a new infrastructure evaluation requestor instance.
/** * Returns a new infrastructure evaluation requestor instance. */
protected IRequestor getInfrastructureEvaluationRequestor(ICodeSnippetRequestor requestor) { return new RequestorWrapper(requestor); }
See Also:
  • getPackageName.getPackageName()
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#getPackageName() */
@Override public String getPackageName() { return new String(this.context.getPackageName()); }
Returns the problem factory to be used during evaluation.
/** * Returns the problem factory to be used during evaluation. */
protected IProblemFactory getProblemFactory() { return ProblemFactory.getProblemFactory(Locale.getDefault()); }
See Also:
  • getProject.getProject()
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#getProject() */
@Override public IJavaProject getProject() { return this.project; }
Handles an install exception by throwing a Java Model exception.
/** * Handles an install exception by throwing a Java Model exception. */
protected void handleInstallException(InstallException e) throws JavaModelException { throw new JavaModelException(new JavaModelStatus(IJavaModelStatusConstants.EVALUATION_ERROR, e.toString())); }
See Also:
  • newVariable.newVariable(String, String, String)
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#newVariable(String, String, String) */
@Override public IGlobalVariable newVariable(String typeName, String name, String initializer) { GlobalVariable newVar = this.context.newVariable( typeName.toCharArray(), name.toCharArray(), (initializer == null) ? null : initializer.toCharArray()); return new GlobalVariableWrapper(newVar); }
See Also:
  • setImports.setImports(String[])
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#setImports(String[]) */
@Override public void setImports(String[] imports) { int length = imports.length; char[][] result = new char[length][]; for (int i = 0; i < length; i++) { result[i] = imports[i].toCharArray(); } this.context.setImports(result); }
See Also:
  • setPackageName.setPackageName(String)
/** * @see org.eclipse.jdt.core.eval.IEvaluationContext#setPackageName(String) */
@Override public void setPackageName(String packageName) { this.context.setPackageName(packageName.toCharArray()); }
See Also:
  • validateImports.validateImports(ICodeSnippetRequestor)
/** * @see IEvaluationContext#validateImports(ICodeSnippetRequestor) */
@Override public void validateImports(ICodeSnippetRequestor requestor) { checkBuilderState(); INameEnvironment environment = null; try { this.context.evaluateImports( environment = getBuildNameEnvironment(), getInfrastructureEvaluationRequestor(requestor), getProblemFactory()); } finally { if (environment != null) environment.cleanup(); } }
See Also:
  • codeComplete.codeComplete(String, int, ICodeCompletionRequestor)
Deprecated:- use codeComplete(String, int, ICompletionRequestor) instead
/** * @see IEvaluationContext#codeComplete(String, int, ICodeCompletionRequestor) * @deprecated - use codeComplete(String, int, ICompletionRequestor) instead */
@Override public void codeComplete(String codeSnippet, int position, final org.eclipse.jdt.core.ICodeCompletionRequestor requestor) throws JavaModelException { if (requestor == null){ codeComplete(codeSnippet, position, (ICompletionRequestor)null); return; } codeComplete( codeSnippet, position, new ICompletionRequestor(){ @Override public void acceptAnonymousType(char[] superTypePackageName,char[] superTypeName,char[][] parameterPackageNames,char[][] parameterTypeNames,char[][] parameterNames,char[] completionName,int modifiers,int completionStart,int completionEnd, int relevance) { // implements interface method } @Override public void acceptClass(char[] packageName, char[] className, char[] completionName, int modifiers, int completionStart, int completionEnd, int relevance) { requestor.acceptClass(packageName, className, completionName, modifiers, completionStart, completionEnd); } @Override public void acceptError(IProblem error) { // was disabled in 1.0 } @Override public void acceptField(char[] declaringTypePackageName, char[] declaringTypeName, char[] name, char[] typePackageName, char[] typeName, char[] completionName, int modifiers, int completionStart, int completionEnd, int relevance) { requestor.acceptField(declaringTypePackageName, declaringTypeName, name, typePackageName, typeName, completionName, modifiers, completionStart, completionEnd); } @Override public void acceptInterface(char[] packageName,char[] interfaceName,char[] completionName,int modifiers,int completionStart,int completionEnd, int relevance) { requestor.acceptInterface(packageName, interfaceName, completionName, modifiers, completionStart, completionEnd); } @Override public void acceptKeyword(char[] keywordName,int completionStart,int completionEnd, int relevance){ requestor.acceptKeyword(keywordName, completionStart, completionEnd); } @Override public void acceptLabel(char[] labelName,int completionStart,int completionEnd, int relevance){ requestor.acceptLabel(labelName, completionStart, completionEnd); } @Override public void acceptLocalVariable(char[] name,char[] typePackageName,char[] typeName,int modifiers,int completionStart,int completionEnd, int relevance){ // ignore } @Override public void acceptMethod(char[] declaringTypePackageName,char[] declaringTypeName,char[] selector,char[][] parameterPackageNames,char[][] parameterTypeNames,char[][] parameterNames,char[] returnTypePackageName,char[] returnTypeName,char[] completionName,int modifiers,int completionStart,int completionEnd, int relevance){ // skip parameter names requestor.acceptMethod(declaringTypePackageName, declaringTypeName, selector, parameterPackageNames, parameterTypeNames, returnTypePackageName, returnTypeName, completionName, modifiers, completionStart, completionEnd); } @Override public void acceptMethodDeclaration(char[] declaringTypePackageName,char[] declaringTypeName,char[] selector,char[][] parameterPackageNames,char[][] parameterTypeNames,char[][] parameterNames,char[] returnTypePackageName,char[] returnTypeName,char[] completionName,int modifiers,int completionStart,int completionEnd, int relevance){ // ignore } @Override public void acceptModifier(char[] modifierName,int completionStart,int completionEnd, int relevance){ requestor.acceptModifier(modifierName, completionStart, completionEnd); } @Override public void acceptPackage(char[] packageName,char[] completionName,int completionStart,int completionEnd, int relevance){ requestor.acceptPackage(packageName, completionName, completionStart, completionEnd); } @Override public void acceptType(char[] packageName,char[] typeName,char[] completionName,int completionStart,int completionEnd, int relevance){ requestor.acceptType(packageName, typeName, completionName, completionStart, completionEnd); } @Override public void acceptVariableName(char[] typePackageName,char[] typeName,char[] name,char[] completionName,int completionStart,int completionEnd, int relevance){ // ignore } }); } }