Allow "before" to be used as a source-package for eclipse tests (see LoggerSlf4jWithPackage).

This commit is contained in:
Philipp Eichhorn committed 2011-06-05 22:14:50 +02:00
1 parent 964b82124d
commit 476b198f16
3 files changed
+52 -18

No files matched your search

+28 -16
View File
@@ -66,29 +66,37 @@ public class RunTestsViaEclipse extends AbstractRunTests {
}
@Override public void transformCode(final StringBuilder messages, StringWriter result, File file) throws Throwable {
String source = readFile(file);
CompilationUnit sourceUnit = new CompilationUnit(source.toCharArray(), file.getName(), "UTF-8");
IErrorHandlingPolicy policy = DefaultErrorHandlingPolicies.proceedWithAllProblems();
IProblemFactory problemFactory = new DefaultProblemFactory(Locale.ENGLISH);
INameEnvironment nameEnvironment = new LombokTestNameEnvironment();
ICompilerRequestor compilerRequestor = new LombokTestCompilerRequestor();
CompilerOptions options = ecjCompilerOptions();
ISourceElementRequestor sourceElementRequestor = new LombokTestSourceElementRequestor();
SourceElementParser parser = new SourceElementParser(sourceElementRequestor, problemFactory, options, true, true);
final CompilationUnitDeclaration cud = parser.parseCompilationUnit(sourceUnit, true, null);
// setup parser and compiler
final IErrorHandlingPolicy policy = DefaultErrorHandlingPolicies.proceedWithAllProblems();
final IProblemFactory problemFactory = new DefaultProblemFactory(Locale.ENGLISH);
final INameEnvironment nameEnvironment = new LombokTestNameEnvironment();
final ICompilerRequestor compilerRequestor = new LombokTestCompilerRequestor();
final ISourceElementRequestor sourceElementRequestor = new LombokTestSourceElementRequestor();
final CompilerOptions options = ecjCompilerOptions();
final LombokTestCompiler jdtCompiler = new LombokTestCompiler(nameEnvironment, policy, options, compilerRequestor, problemFactory);
final SourceElementParser parser = new SourceElementParser(sourceElementRequestor, problemFactory, options, true, true);
// read the file
final String source = readFile(file);
final CompilationUnit sourceUnit = new CompilationUnit(source.toCharArray(), file.getName(), "UTF-8");
// parse
final CompilationUnitDeclaration cud = parser.parseCompilationUnit(sourceUnit, true, null);
// build
jdtCompiler.lookupEnvironment.buildTypeBindings(cud, null);
jdtCompiler.lookupEnvironment.completeTypeBindings(cud, true);
// process
if (cud.scope != null) cud.scope.verifyMethods(jdtCompiler.lookupEnvironment.methodVerifier());
CategorizedProblem[] problems = cud.compilationResult.getAllProblems();
// handle problems
final CategorizedProblem[] problems = cud.compilationResult.getAllProblems();
if (problems != null) for (CategorizedProblem p : problems) {
messages.append(String.format("%d %s %s\n", p.getSourceLineNumber(), p.isError() ? "error" : p.isWarning() ? "warning" : "unknown", p.getMessage()));
}
// set transformed code
result.append(cud.toString());
}
@@ -217,6 +225,10 @@ public class RunTestsViaEclipse extends AbstractRunTests {
private static class LombokTestNameEnvironment implements INameEnvironment {
Map<String, Boolean> packagesCache = new HashMap<String, Boolean>();
public LombokTestNameEnvironment() {
packagesCache.put("before", true);
}
public NameEnvironmentAnswer findType(final char[][] compoundTypeName) {
final StringBuffer result = new StringBuffer();
for (int i = 0; i < compoundTypeName.length; i++) {
@@ -289,8 +301,8 @@ public class RunTestsViaEclipse extends AbstractRunTests {
if (packagesCache.containsKey(name)) {
return packagesCache.get(name).booleanValue();
}
byte[] bytes = getClassDefinition(name);
if (bytes != null) {
if (name.startsWith("before") || (getClassDefinition(name) != null)) {
packagesCache.put(name, false);
return false;
}
@@ -1 +1,22 @@
//ignore
package before;
@lombok.extern.slf4j.Slf4j class LoggerSlf4jWithPackage {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LoggerSlf4jWithPackage.class);
<clinit>() {
}
LoggerSlf4jWithPackage() {
super();
}
}
class LoggerSlf4jWithPackageOuter {
static @lombok.extern.slf4j.Slf4j class Inner {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Inner.class);
<clinit>() {
}
Inner() {
super();
}
}
LoggerSlf4jWithPackageOuter() {
super();
}
}
@@ -1 +1,2 @@
2 error @Log is legal only on types.
2 error @Log is legal only on types.
2 error The annotation @Slf4j is disallowed for this location