spoon.pattern.internal.node.ConstantNode Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spoon-core Show documentation
Show all versions of spoon-core Show documentation
Spoon is a tool for meta-programming, analysis and transformation of Java programs.
/**
* SPDX-License-Identifier: (MIT OR CECILL-C)
*
* Copyright (C) 2006-2019 INRIA and contributors
*
* Spoon is available either under the terms of the MIT License (see LICENSE-MIT.txt) of the Cecill-C License (see LICENSE-CECILL-C.txt). You as the user are entitled to choose the terms under which to adopt Spoon.
*/
package spoon.pattern.internal.node;
import spoon.pattern.Quantifier;
import spoon.pattern.internal.DefaultGenerator;
import spoon.pattern.internal.ResultHolder;
import spoon.pattern.internal.parameter.ParameterInfo;
import spoon.support.util.ImmutableMap;
import java.util.function.BiConsumer;
/**
* Generates/Matches a copy of single template object
*/
public class ConstantNode extends AbstractPrimitiveMatcher {
protected final T template;
public ConstantNode(T template) {
this.template = template;
}
public T getTemplateNode() {
return template;
}
@Override
public boolean replaceNode(RootNode oldNode, RootNode newNode) {
return false;
}
@Override
public void forEachParameterInfo(BiConsumer consumer) {
//it has no parameters
}
@Override
public void generateTargets(DefaultGenerator generator, ResultHolder result, ImmutableMap parameters) {
result.addResult((U) template);
}
@Override
public ImmutableMap matchTarget(Object target, ImmutableMap parameters) {
if (target == null && template == null) {
return parameters;
}
if (target == null || template == null) {
return null;
}
if (target.getClass() != template.getClass()) {
return null;
}
return target.equals(template) ? parameters : null;
}
@Override
public String toString() {
return String.valueOf(template);
}
@Override
public Quantifier getMatchingStrategy() {
return Quantifier.POSSESSIVE;
}
@Override
public boolean isTryNextMatch(ImmutableMap parameters) {
//it always matches only once
return false;
}
}