package org.jboss.windup.ast.java.test; import java.nio.file.Paths; import java.util.HashSet; import java.util.List; import java.util.Set; import org.jboss.arquillian.junit.Arquillian; import org.jboss.windup.ast.java.ASTProcessor; import org.jboss.windup.ast.java.data.ClassReference; import org.jboss.windup.ast.java.data.ResolutionStatus; import org.jboss.windup.ast.java.data.TypeReferenceLocation; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(Arquillian.class) public class JavaEnumerationScanningTest extends AbstractJavaASTTest { @Test public void testEnumerationUsage() { List<ClassReference> references = ASTProcessor.analyze(getLibraryPaths(), getSourcePaths(), Paths.get("src/test/resources/testclasses/enumeration/EnumerationClassUsage.java")); int counter = 0; for (ClassReference reference : references) { if (reference.getQualifiedName().startsWith("java.nio.file.AccessMode") && reference.getLocation() == TypeReferenceLocation.ENUM_CONSTANT) { System.out.println("Reference: " + reference); counter++; } } Assert.assertEquals(3, counter); ClassReference referenceTest = new ClassReference("java.nio.file.AccessMode.WRITE", "java.nio.file", "AccessMode", null, ResolutionStatus.RESOLVED, TypeReferenceLocation.ENUM_CONSTANT, 12, 4, 39, "AccessMode testMode=AccessMode.WRITE;"); Assert.assertTrue(references.contains(referenceTest)); referenceTest = new ClassReference("java.nio.file.AccessMode.WRITE", "java.nio.file", "AccessMode", null, ResolutionStatus.RESOLVED, TypeReferenceLocation.ENUM_CONSTANT, 17, 30, 18, "EnumerationClassUsage.testAccessibleEnum(AccessMode.WRITE)"); Assert.assertTrue(references.contains(referenceTest)); referenceTest = new ClassReference("java.nio.file.AccessMode.READ", "java.nio.file", "AccessMode", null, ResolutionStatus.RESOLVED, TypeReferenceLocation.ENUM_CONSTANT, 31, 41, 21, "new EnumerationClassUsage(AccessMode.READ)"); Assert.assertTrue(references.contains(referenceTest)); } @Test public void testEnumConstWithoutClassOnClasspath() { Set<String> libraryPaths = new HashSet<>(); libraryPaths.add("src/test/resources/testclasses/enumeration/dependency/hibernate-search-engine-5.5.3.Final.jar"); List<ClassReference> references = ASTProcessor.analyze(libraryPaths, getSourcePaths(), Paths.get("src/test/resources/testclasses/enumeration/EnumConstClassNotOnClasspath.java")); int counter = 0; for (ClassReference reference : references) { if (reference.getQualifiedName().contains(".IndexWriterSetting.") && reference.getLocation() == TypeReferenceLocation.ENUM_CONSTANT) { System.out.println("Reference: " + reference); counter++; } } Assert.assertEquals(4, counter); ClassReference referenceTest = new ClassReference("org.hibernate.search.backend.configuration.impl.IndexWriterSetting.MAX_THREAD_STATES", "org.hibernate.search.backend.configuration.impl", "IndexWriterSetting", null, ResolutionStatus.RESOLVED, TypeReferenceLocation.ENUM_CONSTANT, 13, 4, 72, "IndexWriterSetting writerSetting=IndexWriterSetting.MAX_THREAD_STATES;"); Assert.assertTrue(references.contains(referenceTest)); referenceTest = new ClassReference("org.hibernate.search.backend.configuration.impl.IndexWriterSetting.MAX_THREAD_STATES", "org.hibernate.search.backend.configuration.impl", "IndexWriterSetting", null, ResolutionStatus.RESOLVED, TypeReferenceLocation.ENUM_CONSTANT, 15, 4, 54, "IndexWriterSetting writerSetting1=MAX_THREAD_STATES;"); Assert.assertTrue(references.contains(referenceTest)); referenceTest = new ClassReference("org.hibernate.search.backend.configuration.impl.IndexWriterSetting.TERM_INDEX_INTERVAL", "org.hibernate.search.backend.configuration.impl", "IndexWriterSetting", null, ResolutionStatus.RESOLVED, TypeReferenceLocation.ENUM_CONSTANT, 20, 30, 8, "EnumerationClassUsage.testEnum(IndexWriterSetting.TERM_INDEX_INTERVAL)"); Assert.assertTrue(references.contains(referenceTest)); referenceTest = new ClassReference("org.hibernate.search.backend.configuration.impl.IndexWriterSetting.TERM_INDEX_INTERVAL", "org.hibernate.search.backend.configuration.impl", "IndexWriterSetting", null, ResolutionStatus.RESOLVED, TypeReferenceLocation.ENUM_CONSTANT, 34, 48, 28, "new EnumConstClassNotOnClasspath(IndexWriterSetting.TERM_INDEX_INTERVAL)"); Assert.assertTrue(references.contains(referenceTest)); } }