View Javadoc
1   /**
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd.typeresolution;
5   
6   import java.io.InputStream;
7   import java.io.InputStreamReader;
8   import org.junit.Test;
9   import net.sourceforge.pmd.lang.LanguageRegistry;
10  import net.sourceforge.pmd.lang.LanguageVersionHandler;
11  import net.sourceforge.pmd.lang.java.JavaLanguageModule;
12  import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
13  import net.sourceforge.pmd.typeresolution.testdata.UsesJavaStreams;
14  import net.sourceforge.pmd.typeresolution.testdata.UsesRepeatableAnnotations;
15  
16  
17  public class ClassTypeResolverJava8Test {
18  
19      @Test
20      public void interface_method_should_be_parseable() {
21          ASTCompilationUnit acu = parseAndTypeResolveForClass18(UsesJavaStreams.class);
22      }
23  
24      @Test
25      public void repeatable_annotations_method_should_be_parseable() {
26          ASTCompilationUnit acu = parseAndTypeResolveForClass18(UsesRepeatableAnnotations.class);
27      }
28  
29  
30      public static junit.framework.Test suite() {
31          return new junit.framework.JUnit4TestAdapter(ClassTypeResolverJava8Test.class);
32      }
33  
34      private ASTCompilationUnit parseAndTypeResolveForClass18(Class<?> clazz) {
35          return parseAndTypeResolveForClass(clazz, "1.8");
36      }
37  
38      // Note: If you're using Eclipse or some other IDE to run this test, you _must_ have the regress folder in
39      // the classpath.  Normally the IDE doesn't put source directories themselves directly in the classpath, only
40      // the output directories are in the classpath.
41      private ASTCompilationUnit parseAndTypeResolveForClass(Class<?> clazz, String version) {
42          String sourceFile = clazz.getName().replace('.', '/') + ".java";
43          InputStream is = ClassTypeResolverJava8Test.class.getClassLoader().getResourceAsStream(sourceFile);
44          if (is == null) {
45              throw new IllegalArgumentException("Unable to find source file " + sourceFile + " for " + clazz);
46          }
47          LanguageVersionHandler languageVersionHandler = LanguageRegistry.getLanguage(JavaLanguageModule.NAME).getVersion(version).getLanguageVersionHandler();
48          ASTCompilationUnit acu = (ASTCompilationUnit) languageVersionHandler.getParser(languageVersionHandler.getDefaultParserOptions()).parse(null, new InputStreamReader(is));
49          languageVersionHandler.getSymbolFacade().start(acu);
50          languageVersionHandler.getTypeResolutionFacade(ClassTypeResolverJava8Test.class.getClassLoader()).start(acu);
51          return acu;
52      }
53  }