--- a/tools/java/src/stx/libjava/tools/text/Highlighter.java Sun Sep 15 02:16:13 2013 +0100
+++ b/tools/java/src/stx/libjava/tools/text/Highlighter.java Mon Sep 16 01:04:57 2013 +0100
@@ -1,5 +1,7 @@
package stx.libjava.tools.text;
+import net.sf.jasperreports.components.sort.FieldFilter;
+
import org.eclipse.jdt.core.compiler.InvalidInputException;
import org.eclipse.jdt.internal.compiler.ASTVisitor;
import org.eclipse.jdt.internal.compiler.CompilationResult;
@@ -7,15 +9,20 @@
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
import org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration;
+import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
+import org.eclipse.jdt.internal.compiler.ast.FieldReference;
import org.eclipse.jdt.internal.compiler.ast.MessageSend;
import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
+import org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope;
+import org.eclipse.jdt.internal.compiler.lookup.MethodScope;
import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
import org.eclipse.jdt.internal.compiler.problem.ProblemReporter;
+import stx.libjava.tools.environment.Resolver;
import stx.libjava.tools.parser.Parser;
public class Highlighter extends Parser {
@@ -27,26 +34,32 @@
this(new Marker() {
@Override
public void mark(int kind, int from, int to) {
- // TODO Auto-generated method stub
-
+ }
+ },
+ new Indexer() {
+
+ @Override
+ public void index(ASTNode node, int from, int to) {
}
});
}
- public Highlighter(Marker marker) {
+ public Highlighter(Marker marker, Indexer indexer) {
this(
new ProblemReporter(
DefaultErrorHandlingPolicies.proceedWithAllProblems(),
new CompilerOptions(),
new DefaultProblemFactory()),
true,
- marker);
+ marker,
+ indexer);
}
public Highlighter(ProblemReporter problemReporter,
- boolean optimizeStringLiterals, Marker marker) {
+ boolean optimizeStringLiterals, Marker marker, Indexer indexer) {
super(problemReporter, optimizeStringLiterals);
setMarker(marker);
+ setIndexer(indexer);
}
public Marker getMarker() {
@@ -55,7 +68,7 @@
public void setMarker(Marker marker) {
this.marker = marker;
- ((Scanner)this.scanner).marker = marker;
+ ((HighlightingScanner)this.scanner).marker = marker;
}
public Indexer getIndexer() {
@@ -68,7 +81,7 @@
public void initializeScanner(){
- this.scanner = new Highlighter.Scanner(
+ this.scanner = new Highlighter.HighlightingScanner(
false /*comment*/,
false /*whitespace*/,
false, /* will be set in initialize(boolean) */
@@ -80,13 +93,24 @@
}
+ public CompilationUnitDeclaration parse(ICompilationUnit cu, boolean diet, boolean resolve) {
+ CompilationUnitDeclaration cud = super.parse(cu, diet, resolve);
+ HighlightingAndIndexingVisitor v = new HighlightingAndIndexingVisitor();
+ cud.ignoreFurtherInvestigation = false;
+ v.setMarker(marker);
+ v.setIndexer(indexer);
+ cud.traverse(v, (CompilationUnitScope)null);
+ return cud;
+ }
+
+
public ASTNode[] parseClassBodyDeclarations(char[] source, int offset, int length, CompilationUnitDeclaration unit) {
ASTNode[] nodes = super.parseClassBodyDeclarations(source, offset, length, unit);
- Visitor v = new Visitor();
+ HighlightingAndIndexingVisitor v = new HighlightingAndIndexingVisitor();
v.setMarker(marker);
v.setIndexer(indexer);
for (int i = 0; i < nodes.length; i++) {
- ASTNode n = nodes[i];
+ ASTNode n = nodes[i];
if (n instanceof MethodDeclaration) {
((MethodDeclaration)n).traverse(v, (ClassScope)null);
} else {
@@ -97,7 +121,7 @@
}
- public static class Visitor extends ASTVisitor {
+ public static class HighlightingAndIndexingVisitor extends ASTVisitor {
protected Marker marker;
protected Indexer indexer;
@@ -116,40 +140,58 @@
public void setIndexer(Indexer indexer) {
this.indexer = indexer;
}
+
+ public void endVisit(FieldDeclaration fieldDeclaration, MethodScope scope) {
+ marker.mark(Marker.MARK_FIELD, fieldDeclaration.sourceStart, fieldDeclaration.sourceEnd);
+ indexer.index(fieldDeclaration, fieldDeclaration.sourceStart, fieldDeclaration.sourceEnd);
+ }
- public boolean visit(MessageSend messageSend, BlockScope scope) {
+ public void endVisit(FieldReference fieldReference, BlockScope scope) {
+ int start = (int)(fieldReference.nameSourcePosition >>> 32);
+ int stop = (int)(fieldReference.nameSourcePosition & 0x0000FFFF);
+ marker.mark(Marker.MARK_FIELD, start, stop);
+ indexer.index(fieldReference, start, stop);
+ }
+ public void endVisit(FieldReference fieldReference, ClassScope scope) {
+ int start = (int)(fieldReference.nameSourcePosition >>> 32);
+ int stop = (int)(fieldReference.nameSourcePosition & 0x0000FFFF);
+ marker.mark(Marker.MARK_FIELD, start, stop);
+ indexer.index(fieldReference, start, stop);
+ }
+
+
+ public void endVisit(MessageSend messageSend, BlockScope scope) {
int start = (int)(messageSend.nameSourcePosition >>> 32);
int stop = (int)(messageSend.nameSourcePosition & 0x0000FFFF);
- marker.mark(Marker.MARK_SELECTOR, start, stop);
- return true; // continue visiting
+ marker.mark(Marker.MARK_SELECTOR, start, stop);
+ indexer.index(messageSend, start, stop);
}
- public boolean visit(MethodDeclaration methodDeclaration, ClassScope scope) {
+ public void endVisit(MethodDeclaration methodDeclaration, ClassScope scope) {
int start = methodDeclaration.sourceStart;
int stop = start + methodDeclaration.selector.length - 1;
marker.mark(Marker.MARK_SELECTOR, start, stop);
- return true; // do nothing by default, keep traversing
+
}
- public boolean visit(
+ public void endVisit(
ConstructorDeclaration constructorDeclaration,
ClassScope scope) {
int start = constructorDeclaration.sourceStart;
int stop = start + constructorDeclaration.selector.length - 1;
marker.mark(Marker.MARK_SELECTOR, start, stop);
-
- return true; // do nothing by default, keep traversing
+
}
}
- public static class Scanner extends org.eclipse.jdt.internal.compiler.parser.Scanner {
+ public static class HighlightingScanner extends org.eclipse.jdt.internal.compiler.parser.Scanner {
public Marker marker;
protected int lastCommentPtr = -1;
- public Scanner(boolean b, boolean c, boolean d, long sourceLevel,
+ public HighlightingScanner(boolean b, boolean c, boolean d, long sourceLevel,
long complianceLevel, char[][] taskTags,
char[][] taskPriorities, boolean isTaskCaseSensitive) {
super(b,c,d,sourceLevel, complianceLevel, taskTags, taskPriorities, isTaskCaseSensitive);