Copyright (c) 2000, 2019 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 Microsoft Corporation - copied to jdt.core.manipulation
/******************************************************************************* * Copyright (c) 2000, 2019 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 * Microsoft Corporation - copied to jdt.core.manipulation *******************************************************************************/
package org.eclipse.jdt.internal.corext.dom.fragments; import org.eclipse.core.runtime.Assert; import org.eclipse.text.edits.TextEditGroup; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.Name; import org.eclipse.jdt.core.dom.ParenthesizedExpression; import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; import org.eclipse.jdt.internal.corext.dom.JdtASTMatcher; class SimpleFragment extends ASTFragment { private final ASTNode fNode; SimpleFragment(ASTNode node) { Assert.isNotNull(node); fNode= node; } @Override public IASTFragment[] getMatchingFragmentsWithNode(ASTNode node) { if (! JdtASTMatcher.doNodesMatch(getAssociatedNode(), node)) return new IASTFragment[0]; IASTFragment match= ASTFragmentFactory.createFragmentForFullSubtree(node); Assert.isTrue(match.matches(this) || this.matches(match)); return new IASTFragment[] { match }; } @Override public boolean matches(IASTFragment other) { return other.getClass().equals(getClass()) && JdtASTMatcher.doNodesMatch(other.getAssociatedNode(), getAssociatedNode()); } @Override public IASTFragment[] getSubFragmentsMatching(IASTFragment toMatch) { return ASTMatchingFragmentFinder.findMatchingFragments(getAssociatedNode(), (ASTFragment) toMatch); } @Override public int getStartPosition() { return fNode.getStartPosition(); } @Override public int getLength() { return fNode.getLength(); } @Override public ASTNode getAssociatedNode() { return fNode; } @Override public void replace(ASTRewrite rewrite, ASTNode replacement, TextEditGroup textEditGroup) { if (replacement instanceof Name && fNode.getParent() instanceof ParenthesizedExpression) { // replace including the parenthesized expression around it rewrite.replace(fNode.getParent(), replacement, textEditGroup); } else { rewrite.replace(fNode, replacement, textEditGroup); } } @Override public int hashCode() { return fNode.hashCode(); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; SimpleFragment other= (SimpleFragment) obj; return fNode.equals(other.fNode); } }