Copyright (c) 2007, 2008 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) 2007, 2008 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.core.internal.expressions;
import org.w3c.dom.Element;
import org.eclipse.core.expressions.EvaluationResult;
import org.eclipse.core.expressions.Expression;
import org.eclipse.core.expressions.ExpressionInfo;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
This class makes use of the org.eclipse.core.expressions.definitions
extension point to evaluate the current context against pre-defined
expressions. It provides core expression re-use.
Since: 3.3
/**
* This class makes use of the <b>org.eclipse.core.expressions.definitions</b>
* extension point to evaluate the current context against pre-defined
* expressions. It provides core expression re-use.
*
* @since 3.3
*/
public class ReferenceExpression extends Expression {
// consider making this a more general extension manager
// for now it's just part of the reference expression
private static DefinitionRegistry fgDefinitionRegistry= null;
private static DefinitionRegistry getDefinitionRegistry() {
if (fgDefinitionRegistry == null) {
fgDefinitionRegistry= new DefinitionRegistry();
}
return fgDefinitionRegistry;
}
private static final String ATT_DEFINITION_ID= "definitionId"; //$NON-NLS-1$
The seed for the hash code for all equals expressions.
/**
* The seed for the hash code for all equals expressions.
*/
private static final int HASH_INITIAL= ReferenceExpression.class.getName().hashCode();
private String fDefinitionId;
public ReferenceExpression(String definitionId) {
Assert.isNotNull(definitionId);
fDefinitionId= definitionId;
}
public ReferenceExpression(IConfigurationElement element) throws CoreException {
fDefinitionId= element.getAttribute(ATT_DEFINITION_ID);
Expressions.checkAttribute(ATT_DEFINITION_ID, fDefinitionId);
}
public ReferenceExpression(Element element) throws CoreException {
fDefinitionId= element.getAttribute(ATT_DEFINITION_ID);
Expressions.checkAttribute(ATT_DEFINITION_ID, fDefinitionId.isEmpty() ? null : fDefinitionId);
}
@Override
public EvaluationResult evaluate(IEvaluationContext context) throws CoreException {
Expression expr= getDefinitionRegistry().getExpression(fDefinitionId);
return expr.evaluate(context);
}
@Override
public void collectExpressionInfo(ExpressionInfo info) {
Expression expr;
try {
expr= getDefinitionRegistry().getExpression(fDefinitionId);
} catch (CoreException e) {
// We didn't find the expression definition. So no
// expression info can be collected.
return;
}
expr.collectExpressionInfo(info);
}
@Override
public boolean equals(final Object object) {
if (!(object instanceof ReferenceExpression))
return false;
final ReferenceExpression that= (ReferenceExpression)object;
return this.fDefinitionId.equals(that.fDefinitionId);
}
@Override
protected int computeHashCode() {
return HASH_INITIAL * HASH_FACTOR + fDefinitionId.hashCode();
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder(getClass().getSimpleName());
builder.append(" [definitionId="); //$NON-NLS-1$
builder.append(fDefinitionId);
builder.append("]"); //$NON-NLS-1$
return builder.toString();
}
}