All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.codemodder.javaparser.JavaParserCodemodRunner Maven / Gradle / Ivy

package io.codemodder.javaparser;

import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter;
import io.codemodder.*;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.List;
import java.util.Objects;

/**
 * {@inheritDoc}
 *
 * 

This type specializes in non-Java file. */ public final class JavaParserCodemodRunner implements CodemodRunner { private final JavaParserChanger javaParserChanger; private final JavaParserFacade parser; private final EncodingDetector encodingDetector; private final IncludesExcludes rootedFileMatcher; public JavaParserCodemodRunner( final JavaParserFacade parser, final JavaParserChanger javaParserChanger, final Path projectDir, final IncludesExcludes globalIncludesExcludes, final EncodingDetector encodingDetector) { this.parser = Objects.requireNonNull(parser); this.javaParserChanger = Objects.requireNonNull(javaParserChanger); this.encodingDetector = Objects.requireNonNull(encodingDetector); this.rootedFileMatcher = Objects.requireNonNull(globalIncludesExcludes); } public JavaParserCodemodRunner( final JavaParserFacade parser, final JavaParserChanger javaParserChanger, final Path projectDir, final EncodingDetector encodingDetector) { this.parser = Objects.requireNonNull(parser); this.javaParserChanger = Objects.requireNonNull(javaParserChanger); this.encodingDetector = Objects.requireNonNull(encodingDetector); // If no global includes/excludes are specified, each codemod will decide which files to inspect this.rootedFileMatcher = javaParserChanger.getIncludesExcludesPattern().getRootedMatcher(projectDir); } @Override public boolean supports(final Path path) { return rootedFileMatcher.shouldInspect(path.toFile()) && javaParserChanger.supports(path); } @Override public CodemodFileScanningResult run(final CodemodInvocationContext context) throws IOException { Path file = context.path(); CompilationUnit cu = parser.parseJavaFile(file); CodemodFileScanningResult result = javaParserChanger.visit(context, cu); List changes = result.changes(); if (!changes.isEmpty()) { String encodingName = encodingDetector.detect(file).orElse("UTF-8"); Charset encoding = Charset.forName(encodingName); String modified = (LexicalPreservingPrinter.print(cu)); Files.writeString(file, modified, encoding, StandardOpenOption.TRUNCATE_EXISTING); } return result; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy