All basic elements of netbeans support are here except the actual agent part.

This commit is contained in:
Reinier Zwitserloot committed 2009-11-30 00:49:42 +01:00
1 parent 29c2ba1bbb
commit dfa401018d
7 files changed
+126 -7

No files matched your search

+1
View File
@@ -15,6 +15,7 @@
<classpathentry kind="lib" path="deps/lombok/eclipse/org.eclipse.osgi_3.5.0.v20090520.jar"/>
<classpathentry kind="lib" path="deps/lombok/eclipse/org.eclipse.equinox.common_3.5.0.v20090520-1800.jar"/>
<classpathentry kind="lib" path="deps/lombok/netbeans/org-netbeans-modules-java-source_6.8beta.jar"/>
<classpathentry kind="lib" path="deps/lombok/netbeans/org-openide-util_6.8beta.jar"/>
<classpathentry kind="lib" path="deps/junit-4.7.jar"/>
<classpathentry kind="lib" path="deps/lombok/ant.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/lombok.patcher"/>
Binary file not shown.
+1
View File
@@ -125,6 +125,7 @@ public class JavacAST extends AST<JavacAST, JavacNode, JCTree> {
/** @return A TreeMaker instance that you can use to create new AST nodes. */
public TreeMaker getTreeMaker() {
treeMaker.at(-1);
return treeMaker;
}
@@ -0,0 +1,53 @@
package lombok.netbeans.agent;
import java.util.Collections;
import javax.annotation.processing.Messager;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.Element;
import javax.tools.Diagnostic.Kind;
import lombok.javac.JavacTransformer;
import com.sun.source.util.TaskEvent;
import com.sun.source.util.TaskListener;
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
import com.sun.tools.javac.util.Context;
public class NetbeansEntryPoint implements TaskListener {
public class DummyMessager implements Messager {
@Override public void printMessage(Kind kind, CharSequence msg) {
System.err.printf("%s: %s\n", kind, msg);
}
@Override public void printMessage(Kind kind, CharSequence msg, Element e) {
printMessage(kind, msg);
}
@Override public void printMessage(Kind kind, CharSequence msg, Element e, AnnotationMirror a) {
printMessage(kind, msg);
}
@Override public void printMessage(Kind kind, CharSequence msg, Element e, AnnotationMirror a, AnnotationValue v) {
printMessage(kind, msg);
}
}
private final Context context;
public NetbeansEntryPoint(Context context) {
this.context = context;
}
@Override public void started(TaskEvent event) {
//we run at the end, so all the action is in #finished.
}
@Override public void finished(TaskEvent event) {
if (TaskEvent.Kind.PARSE == event.getKind()) {
JavacTransformer transformer = new JavacTransformer(new DummyMessager()); //TODO hook into netbeans error reporting!
transformer.transform(context, Collections.singleton((JCCompilationUnit)event.getCompilationUnit()));
}
}
}
@@ -63,14 +63,14 @@ public class NetbeansPatcher {
.build());
sm.addScript(ScriptBuilder.wrapReturnValue()
.request()
.request(StackRequest.RETURN_VALUE, StackRequest.PARAM1)
.transplant()
.target(new MethodTarget("org.netbeans.modules.java.source.parsing.JavacParser", "createJavacTask",
"com.sun.tools.javac.api.JavacTaskImpl",
"ClasspathInfo", "DiagnosticListener", "java.lang.String", "boolean",
"ClassNamesForFileOraculum", "CancelService"))
.wrapMethod(new Hook("lombok/netbeans/agent/PatchFixes", "addTaskListenerWhenCallingJavac",
"()V"))
"(Lcom/sun/tools/javac/api/JavacTaskImpl;Lorg/netbeans/api/java/source/ClasspathInfo;)V"))
.build());
}
@@ -94,5 +94,12 @@ public class NetbeansPatcher {
.replacementMethod(new Hook("lombok/netbeans/agent/PatchFixes", "returnMinus1ForGeneratedNode",
"(Lcom/sun/source/util/SourcePositions;Lcom/sun/source/tree/CompilationUnitTree;Lcom/sun/source/tree/Tree;)J"))
.build());
sm.addScript(ScriptBuilder.wrapMethodCall()
.target(new MethodTarget("org.netbeans.modules.java.source.save.CasualDiff", "filterHidden"))
.methodToWrap(new Hook("java/lang/Iterable", "iterator", "()L/java/util/Iterator;"))
.wrapMethod(new Hook("lombok/netbeans/agent/PatchFixes", "filterGenerated",
"(Ljava/util/Iterator;)L/java/util/Iterator;"))
.transplant().build());
}
}
@@ -2,10 +2,13 @@ package lombok.netbeans.agent;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.NoSuchElementException;
import javax.lang.model.element.Element;
import org.netbeans.api.java.source.ClasspathInfo;
import org.openide.util.Lookup;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.Tree;
@@ -13,6 +16,7 @@ import com.sun.source.util.SourcePositions;
import com.sun.source.util.TaskListener;
import com.sun.source.util.Trees;
import com.sun.tools.javac.api.JavacTaskImpl;
import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.util.Context;
public class PatchFixes {
@@ -65,13 +69,54 @@ public class PatchFixes {
//Contributed by Jan Lahoda (jlahoda@netbeans.org)
//Turned into a patch script by rzwitserloot.
//see http://code.google.com/p/projectlombok/issues/detail?id=20#c3
public static void addTaskListenerWhenCallingJavac(Context context, ClasspathInfo cpInfo) {
TaskListenerProvider p = /* Lookup.getDefault().lookup(TaskListenerProvider.class) */;
public static void addTaskListenerWhenCallingJavac(JavacTaskImpl task, ClasspathInfo cpInfo) {
TaskListenerProvider p = Lookup.getDefault().lookup(TaskListenerProvider.class);
if (p != null) {
TaskListener l = p.create(context, cpInfo);
TaskListener l = p.create(task.getContext(), cpInfo);
task.setTaskListener(l);
}
return;
}
//Contributed by Jan Lahoda (jlahoda@netbeans.org)
//Turned into a patch script by rzwitserloot.
//see http://code.google.com/p/projectlombok/issues/detail?id=20#c3
public static Iterator<JCTree> filterGenerated(final Iterator<JCTree> it) {
return new Iterator<JCTree>() {
private JCTree next;
private boolean hasNext;
{
calc();
}
private void calc() {
while (it.hasNext()) {
JCTree n = it.next();
if (n.pos != -1) {
hasNext = true;
next = n;
return;
}
}
hasNext = false;
next = null;
}
@Override public boolean hasNext() {
return hasNext;
}
@Override public JCTree next() {
if (!hasNext) throw new NoSuchElementException();
JCTree n = next;
calc();
return n;
}
@Override public void remove() {
throw new UnsupportedOperationException();
}
};
}
}
@@ -0,0 +1,12 @@
package lombok.netbeans.agent;
import org.netbeans.api.java.source.ClasspathInfo;
import com.sun.source.util.TaskListener;
import com.sun.tools.javac.util.Context;
public class TaskListenerProviderImpl implements TaskListenerProvider {
public TaskListener create(final Context context, ClasspathInfo cpInfo) {
return new NetbeansEntryPoint(context);
}
}