Removed some redundancy in ClassTypeResolver and MetricsVisitorTest

This commit is contained in:
oowekyala
2017-08-15 14:56:07 +02:00
parent 17bb56a179
commit 0df423f1d2
4 changed files with 52 additions and 87 deletions

View File

@ -120,75 +120,92 @@ public class ParserTstUtil {
return cu;
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava13(String code) {
return parseJava("1.3", code);
return parseJava(getLanguageVersionHandler("1.3"), code);
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava14(String code) {
return parseJava("1.4", code);
return parseJava(getLanguageVersionHandler("1.4"), code);
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava15(String code) {
return parseJava("1.5", code);
return parseJava(getLanguageVersionHandler("1.5"), code);
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava17(String code) {
return parseJava("1.7", code);
return parseJava(getLanguageVersionHandler("1.7"), code);
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava18(String code) {
return parseJava("1.8", code);
return parseJava(getLanguageVersionHandler("1.8"), code);
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava13(Class<?> source) {
return parseJava13(getSourceFromClass(source));
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava14(Class<?> source) {
return parseJava14(getSourceFromClass(source));
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava15(Class<?> source) {
return parseJava15(getSourceFromClass(source));
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava17(Class<?> source) {
return parseJava17(getSourceFromClass(source));
}
/** @see #parseJava(String, String) */
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJava18(Class<?> source) {
return parseJava18(getSourceFromClass(source));
}
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJavaDefaultVersion(String source) {
return parseJava(getDefaultLanguageVersionHandler(), source);
}
/** @see #parseJava(LanguageVersionHandler, String) */
public static ASTCompilationUnit parseJavaDefaultVersion(Class<?> source) {
return parseJavaDefaultVersion(getSourceFromClass(source));
}
public static LanguageVersionHandler getLanguageVersionHandler(String version) {
return LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion(version).getLanguageVersionHandler();
}
public static LanguageVersionHandler getDefaultLanguageVersionHandler() {
return LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getDefaultVersion().getLanguageVersionHandler();
}
/**
* Parses Java code and executes the symbol table visitor.
*
* @param version The Java version to use
* @param code The source code
* @param languageVersionHandler The version handler for the wanted version
* @param code The source code
*
* @return The compilation unit
*/
public static ASTCompilationUnit parseJava(String version, String code) {
LanguageVersion languageVersion = LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion(version);
LanguageVersionHandler languageVersionHandler = languageVersion.getLanguageVersionHandler();
public static ASTCompilationUnit parseJava(LanguageVersionHandler languageVersionHandler, String code) {
ASTCompilationUnit rootNode = (ASTCompilationUnit) languageVersionHandler
.getParser(languageVersionHandler.getDefaultParserOptions()).parse(null, new StringReader(code));
languageVersionHandler.getSymbolFacade().start(rootNode);
return rootNode;
}
private static String getSourceFromClass(Class<?> clazz) {
public static String getSourceFromClass(Class<?> clazz) {
String sourceFile = clazz.getName().replace('.', '/') + ".java";
InputStream is = ParserTstUtil.class.getClassLoader().getResourceAsStream(sourceFile);
if (is == null) {

View File

@ -8,16 +8,10 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import net.sourceforge.pmd.lang.LanguageRegistry;
import net.sourceforge.pmd.lang.LanguageVersionHandler;
import net.sourceforge.pmd.lang.java.JavaLanguageModule;
import net.sourceforge.pmd.lang.java.ParserTstUtil;
import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration;
import net.sourceforge.pmd.lang.java.ast.JavaParserVisitorAdapter;
@ -27,7 +21,6 @@ import net.sourceforge.pmd.lang.java.metrics.signature.JavaOperationSigMask;
import net.sourceforge.pmd.lang.java.metrics.signature.JavaOperationSignature.Role;
import net.sourceforge.pmd.lang.java.metrics.signature.JavaSignature.Visibility;
import net.sourceforge.pmd.lang.java.metrics.testdata.MetricsVisitorTestData;
import net.sourceforge.pmd.typeresolution.ClassTypeResolverTest;
/**
* Tests of the metrics visitor.
@ -45,7 +38,7 @@ public class JavaMetricsVisitorTest {
@Test
public void testOperationsAreThere() {
ASTCompilationUnit acu = parseAndVisitForClass15(MetricsVisitorTestData.class);
ASTCompilationUnit acu = parseAndVisitForClass(MetricsVisitorTestData.class);
final JavaSignatureMatcher toplevel = JavaMetrics.getFacade().getTopLevelPackageStats();
@ -64,7 +57,7 @@ public class JavaMetricsVisitorTest {
@Test
public void testFieldsAreThere() {
parseAndVisitForClass15(MetricsVisitorTestData.class);
parseAndVisitForClass(MetricsVisitorTestData.class);
final JavaSignatureMatcher toplevel = JavaMetrics.getFacade().getTopLevelPackageStats();
@ -88,7 +81,7 @@ public class JavaMetricsVisitorTest {
// problem
@Test
public void testStaticOperationsSig() {
parseAndVisitForClass15(MetricsVisitorTestData.class);
parseAndVisitForClass(MetricsVisitorTestData.class);
final JavaSignatureMatcher toplevel = JavaMetrics.getFacade().getTopLevelPackageStats();
@ -108,42 +101,11 @@ public class JavaMetricsVisitorTest {
}
/* default */
static ASTCompilationUnit parseAndVisitForClass15(Class<?> clazz) {
return parseAndVisitForClass(clazz, "1.5");
}
// Note: If you're using Eclipse or some other IDE to run this test, you
// _must_ have the src/test/java folder in
// the classpath. Normally the IDE doesn't put source directories themselves
// directly in the classpath, only
// the output directories are in the classpath.
private static ASTCompilationUnit parseAndVisitForClass(Class<?> clazz, String version) {
String sourceFile = clazz.getName().replace('.', '/') + ".java";
InputStream is = ClassTypeResolverTest.class.getClassLoader().getResourceAsStream(sourceFile);
if (is == null) {
throw new IllegalArgumentException(
"Unable to find source file " + sourceFile + " for " + clazz);
}
String source;
try {
source = IOUtils.toString(is);
} catch (IOException e) {
throw new RuntimeException(e);
}
return parseAndVisitForString(source, version);
}
private static ASTCompilationUnit parseAndVisitForString(String source, String version) {
LanguageVersionHandler languageVersionHandler = LanguageRegistry.getLanguage(JavaLanguageModule.NAME)
.getVersion(version).getLanguageVersionHandler();
ASTCompilationUnit acu = (ASTCompilationUnit) languageVersionHandler
.getParser(languageVersionHandler.getDefaultParserOptions()).parse(null, new StringReader(source));
languageVersionHandler.getSymbolFacade().start(acu);
languageVersionHandler.getTypeResolutionFacade(JavaMetricsVisitorTest.class.getClassLoader()).start(acu);
languageVersionHandler.getMetricsVisitorFacade().start(acu);
static ASTCompilationUnit parseAndVisitForClass(Class<?> clazz) {
ASTCompilationUnit acu = ParserTstUtil.parseJavaDefaultVersion(clazz);
LanguageVersionHandler handler = ParserTstUtil.getDefaultLanguageVersionHandler();
handler.getTypeResolutionFacade(JavaMetricsVisitorTest.class.getClassLoader()).start(acu);
handler.getMetricsVisitorFacade().start(acu);
return acu;
}
}

View File

@ -4,7 +4,7 @@
package net.sourceforge.pmd.lang.java.metrics;
import static net.sourceforge.pmd.lang.java.metrics.JavaMetricsVisitorTest.parseAndVisitForClass15;
import static net.sourceforge.pmd.lang.java.metrics.JavaMetricsVisitorTest.parseAndVisitForClass;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
@ -38,7 +38,7 @@ public class ProjectMemoizerTest {
@Test
public void memoizationTest() {
ASTCompilationUnit acu = parseAndVisitForClass15(MetricsVisitorTestData.class);
ASTCompilationUnit acu = parseAndVisitForClass(MetricsVisitorTestData.class);
List<Integer> expected = visitWith(acu, true);
List<Integer> real = visitWith(acu, false);
@ -49,7 +49,7 @@ public class ProjectMemoizerTest {
@Test
public void forceMemoizationTest() {
ASTCompilationUnit acu = parseAndVisitForClass15(MetricsVisitorTestData.class);
ASTCompilationUnit acu = parseAndVisitForClass(MetricsVisitorTestData.class);
List<Integer> reference = visitWith(acu, true);
List<Integer> real = visitWith(acu, true);

View File

@ -8,17 +8,13 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.StringTokenizer;
import org.apache.commons.io.IOUtils;
import org.jaxen.JaxenException;
import org.junit.Assert;
import org.junit.Test;
@ -26,6 +22,7 @@ import net.sourceforge.pmd.lang.LanguageRegistry;
import net.sourceforge.pmd.lang.LanguageVersionHandler;
import net.sourceforge.pmd.lang.ast.Node;
import net.sourceforge.pmd.lang.java.JavaLanguageModule;
import net.sourceforge.pmd.lang.java.ParserTstUtil;
import net.sourceforge.pmd.lang.java.ast.ASTAllocationExpression;
import net.sourceforge.pmd.lang.java.ast.ASTBooleanLiteral;
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
@ -1495,18 +1492,7 @@ public class ClassTypeResolverTest {
// directly in the classpath, only
// the output directories are in the classpath.
private ASTCompilationUnit parseAndTypeResolveForClass(Class<?> clazz, String version) {
String sourceFile = clazz.getName().replace('.', '/') + ".java";
InputStream is = ClassTypeResolverTest.class.getClassLoader().getResourceAsStream(sourceFile);
if (is == null) {
throw new IllegalArgumentException("Unable to find source file " + sourceFile + " for " + clazz);
}
String source;
try {
source = IOUtils.toString(is);
} catch (IOException e) {
throw new RuntimeException(e);
}
return parseAndTypeResolveForString(source, version);
return parseAndTypeResolveForString(ParserTstUtil.getSourceFromClass(clazz), version);
}
private ASTCompilationUnit parseAndTypeResolveForString(String source, String version) {