Skip to content

Commit

Permalink
[23] FoldingStructureComputationContext should respect the project
Browse files Browse the repository at this point in the history
compliance level for parsing

fixes eclipse-jdt#1634
  • Loading branch information
stephan-herrmann committed Sep 10, 2024
1 parent dae21fe commit 3f0f333
Showing 1 changed file with 27 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaElementDelta;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IParent;
import org.eclipse.jdt.core.ISourceRange;
Expand Down Expand Up @@ -107,15 +108,16 @@ protected final class FoldingStructureComputationContext {
private IType fFirstType;
private boolean fHasHeaderComment;
private LinkedHashMap<JavaProjectionAnnotation, Position> fMap= new LinkedHashMap<>();
private IScanner fScanner;
private IScanner fDefaultScanner; // this one may or not be the shared DefaultJavaFoldingStructureProvider.fSharedScanner
private IScanner fScannerForProject;

private FoldingStructureComputationContext(IDocument document, ProjectionAnnotationModel model, boolean allowCollapsing, IScanner scanner) {
Assert.isNotNull(document);
Assert.isNotNull(model);
fDocument= document;
fModel= model;
fAllowCollapsing= allowCollapsing;
fScanner= scanner;
fDefaultScanner= scanner;
}

private void setFirstType(IType type) {
Expand Down Expand Up @@ -167,9 +169,28 @@ private ProjectionAnnotationModel getModel() {
}

private IScanner getScanner() {
if (fScanner == null)
fScanner= ToolFactory.createScanner(true, false, false, false);
return fScanner;
if (fScannerForProject != null) {
return fScannerForProject;
}
IJavaProject javaProject= fInput != null ? fInput.getJavaProject(): null;
if (javaProject != null) {
String projectSource= javaProject.getOption(JavaCore.COMPILER_SOURCE, true);
String projectCompliance= javaProject.getOption(JavaCore.COMPILER_COMPLIANCE, true);
if (!JavaCore.getOption(JavaCore.COMPILER_COMPLIANCE).equals(projectCompliance)
|| !JavaCore.getOption(JavaCore.COMPILER_SOURCE).equals(projectSource)) {
return fScannerForProject= ToolFactory.createScanner(true, false, false, projectSource, projectCompliance);
}
}
if (fDefaultScanner == null)
fDefaultScanner= ToolFactory.createScanner(true, false, false, false);
return fDefaultScanner;
}

private void setSource(char[] source) {
if (fDefaultScanner != null)
fDefaultScanner.setSource(source);
if (fScannerForProject != null)
fScannerForProject.setSource(source);
}

/**
Expand Down Expand Up @@ -969,7 +990,7 @@ private void update(FoldingStructureComputationContext ctx) {
Annotation[] changedArray= updates.toArray(new Annotation[updates.size()]);
ctx.getModel().modifyAnnotations(deletedArray, additions, changedArray);

ctx.fScanner.setSource(null);
ctx.setSource(null);
}

private void computeFoldingStructure(FoldingStructureComputationContext ctx) {
Expand Down

0 comments on commit 3f0f333

Please sign in to comment.