A temporary fix for the whitespace problem (each marker is wrapped, this is costly)
This commit is contained in:
@@ -0,0 +1,68 @@
|
|||||||
|
package org.jetbrains.jet.lang.parsing;
|
||||||
|
|
||||||
|
import com.intellij.lang.PsiBuilder;
|
||||||
|
import com.intellij.lang.WhitespacesAndCommentsBinder;
|
||||||
|
import com.intellij.psi.tree.IElementType;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author abreslav
|
||||||
|
*/
|
||||||
|
public class MarkerAdapter implements PsiBuilder.Marker {
|
||||||
|
|
||||||
|
private final PsiBuilder.Marker delegate;
|
||||||
|
|
||||||
|
public MarkerAdapter(PsiBuilder.Marker delegate) {
|
||||||
|
this.delegate = delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PsiBuilder.Marker precede() {
|
||||||
|
return delegate.precede();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drop() {
|
||||||
|
delegate.drop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rollbackTo() {
|
||||||
|
delegate.rollbackTo();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void done(IElementType type) {
|
||||||
|
delegate.done(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void collapse(IElementType type) {
|
||||||
|
delegate.collapse(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doneBefore(IElementType type, PsiBuilder.Marker before) {
|
||||||
|
delegate.doneBefore(type, before);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doneBefore(IElementType type, PsiBuilder.Marker before, String errorMessage) {
|
||||||
|
delegate.doneBefore(type, before, errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void error(String message) {
|
||||||
|
delegate.error(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void errorBefore(String message, PsiBuilder.Marker before) {
|
||||||
|
delegate.errorBefore(message, before);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCustomEdgeTokenBinders(@Nullable WhitespacesAndCommentsBinder left, @Nullable WhitespacesAndCommentsBinder right) {
|
||||||
|
delegate.setCustomEdgeTokenBinders(left, right);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -39,4 +39,18 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp
|
|||||||
public boolean eolInLastWhitespace() {
|
public boolean eolInLastWhitespace() {
|
||||||
return myEOLInLastWhitespace || eof();
|
return myEOLInLastWhitespace || eof();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Overhead
|
||||||
|
@Override
|
||||||
|
public Marker mark() {
|
||||||
|
return new MarkerAdapter(super.mark()) {
|
||||||
|
private final boolean eolInLastWhitespace = eolInLastWhitespace();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rollbackTo() {
|
||||||
|
super.rollbackTo();
|
||||||
|
myEOLInLastWhitespace = eolInLastWhitespace;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user