Skip to content

Commit

Permalink
Implement provider for sticky lines in JAVA
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher-Hermann committed Dec 13, 2024
1 parent 960a909 commit e9e50e9
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
14 changes: 14 additions & 0 deletions org.eclipse.jdt.ui/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7830,4 +7830,18 @@
file-extensions="class without source">
</file-association>
</extension>
<extension
point="org.eclipse.ui.editors.stickyLinesProviders">
<stickyLinesProvider
class="org.eclipse.jdt.internal.ui.javaeditor.StickyLinesProviderJava"
id="org.eclipse.jdt.internal.ui.StickyLinesProviderJava">
<enabledWhen>
<and>
<with variable="editor">
<instanceof value="org.eclipse.jdt.internal.ui.javaeditor.JavaEditor"/>
</with>
</and>
</enabledWhen>
</stickyLinesProvider>
</extension>
</plugin>
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.eclipse.jdt.internal.ui.javaeditor;

import java.util.LinkedList;
import java.util.List;

import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.source.ISourceViewer;

import org.eclipse.ui.texteditor.stickyscroll.IStickyLine;
import org.eclipse.ui.texteditor.stickyscroll.IStickyLinesProvider;
import org.eclipse.ui.texteditor.stickyscroll.StickyLine;

import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.ISourceReference;
import org.eclipse.jdt.core.JavaModelException;

public class StickyLinesProviderJava implements IStickyLinesProvider {

@Override
public List<IStickyLine> getStickyLines(ISourceViewer sourceViewer, int lineNumber, StickyLinesProperties properties) {
LinkedList<IStickyLine> stickyLines= new LinkedList<>();
JavaEditor javaEditor= (JavaEditor) properties.editor();

IJavaElement element= null;
try {
element= javaEditor.getElementAt(sourceViewer.getDocument().getLineOffset(lineNumber));
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

while (element != null) {
if (element.getElementType() == IJavaElement.METHOD || element.getElementType() == IJavaElement.TYPE) {
try {
ISourceRange sourceRange= ((ISourceReference) element).getNameRange();
int offset= sourceRange.getOffset();
int stickyLineNumber= sourceViewer.getDocument().getLineOfOffset(offset);
stickyLines.addFirst(new StickyLine(stickyLineNumber, sourceViewer));
} catch (JavaModelException | BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
element= element.getParent();
}

return stickyLines;
}

}

0 comments on commit e9e50e9

Please sign in to comment.