This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
I would like to do $subj in the lexer SPI that would encapsulate the present parameters passed to LanguageHierarchy.createLexer(): protected abstract Lexer<T> createLexer(LexerInput input, TokenFactory<T> tokenFactory, Object state, LanguagePath languagePath, InputAttributes inputAttributes); would become protected abstract Lexer<T> createLexer(LexerRestartInfo info); and the class would encapsulate the arguments passed currently. Justification: with additional requirements there may be additional information needed for lexer restarting. For example the issue #87014 will require an extra parameter. By encapsulating the parameters into a final class we can evolve the API in a compatible way in the future. We could also consider adding of LexerRestartState.getAttributeValue(Object attributeKey) that would return (inputAttributes != null) ? inputAttributes.getValue(languagePath, attributeKey) : null; It's slightly annoying to write that for each possible attribute (see e.g. StateLexer in the lexer tests).
Adding apireviews to cc since this change will affect the lexer API.
I guess this would be protected abstract Lexer<T> createLexer(LexerRestartInfo<T> info); ^^^ Do you have a proposed patch yet?
Yes, I forgot to mention the generification. Attaching the patch.
Created attachment 35340 [details] Patch for lexer (existing lexers will be patched before commit)
Fixed in trunk: Checking in java/lexer/src/org/netbeans/api/java/lexer/JavadocTokenId.java; /cvs/java/lexer/src/org/netbeans/api/java/lexer/JavadocTokenId.java,v <-- JavadocTokenId.java new revision: 1.4; previous revision: 1.3 done Checking in java/lexer/src/org/netbeans/api/java/lexer/JavaTokenId.java; /cvs/java/lexer/src/org/netbeans/api/java/lexer/JavaTokenId.java,v <-- JavaTokenId.java new revision: 1.4; previous revision: 1.3 done Checking in java/lexer/src/org/netbeans/api/java/lexer/JavaStringTokenId.java; /cvs/java/lexer/src/org/netbeans/api/java/lexer/JavaStringTokenId.java,v <-- JavaStringTokenId.java new revision: 1.4; previous revision: 1.3 done Checking in lexer/nbbridge/test/unit/src/org/netbeans/modules/lexer/nbbridge/test/simple/SimpleCharLexer.java; /cvs/lexer/nbbridge/test/unit/src/org/netbeans/modules/lexer/nbbridge/test/simple/SimpleCharLexer.java,v <-- SimpleCharLexer.java new revision: 1.3; previous revision: 1.2 done Checking in lexer/nbbridge/test/unit/src/org/netbeans/modules/lexer/nbbridge/test/simple/SimpleCharTokenId.java; /cvs/lexer/nbbridge/test/unit/src/org/netbeans/modules/lexer/nbbridge/test/simple/SimpleCharTokenId.java,v <-- SimpleCharTokenId.java new revision: 1.4; previous revision: 1.3 done Checking in lexer/nbbridge/test/unit/src/org/netbeans/modules/lexer/nbbridge/test/simple/SimplePlainLexer.java; /cvs/lexer/nbbridge/test/unit/src/org/netbeans/modules/lexer/nbbridge/test/simple/SimplePlainLexer.java,v <-- SimplePlainLexer.java new revision: 1.3; previous revision: 1.2 done RCS file: /cvs/lexer/src/org/netbeans/spi/lexer/LexerRestartInfo.java,v done Checking in lexer/src/org/netbeans/spi/lexer/LexerRestartInfo.java; /cvs/lexer/src/org/netbeans/spi/lexer/LexerRestartInfo.java,v <-- LexerRestartInfo.java initial revision: 1.1 done Checking in lexer/src/org/netbeans/spi/lexer/LanguageHierarchy.java; /cvs/lexer/src/org/netbeans/spi/lexer/LanguageHierarchy.java,v <-- LanguageHierarchy.java new revision: 1.5; previous revision: 1.4 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleJavadocLexer.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleJavadocLexer.java,v <-- SimpleJavadocLexer.java new revision: 1.3; previous revision: 1.2 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/GenLanguage.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/GenLanguage.java,v <-- GenLanguage.java new revision: 1.3; previous revision: 1.2 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleCharLexer.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleCharLexer.java,v <-- SimpleCharLexer.java new revision: 1.3; previous revision: 1.2 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLanguageProvider.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLanguageProvider.java,v <-- SimpleLanguageProvider.java new revision: 1.6; previous revision: 1.5 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimplePlainLexer.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimplePlainLexer.java,v <-- SimplePlainLexer.java new revision: 1.3; previous revision: 1.2 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexer.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleLexer.java,v <-- SimpleLexer.java new revision: 1.3; previous revision: 1.2 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleJavadocTokenId.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleJavadocTokenId.java,v <-- SimpleJavadocTokenId.java new revision: 1.4; previous revision: 1.3 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleStringLexer.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/simple/SimpleStringLexer.java,v <-- SimpleStringLexer.java new revision: 1.3; previous revision: 1.2 done Checking in html/lexer/src/org/netbeans/api/html/lexer/HTMLTokenId.java; /cvs/html/lexer/src/org/netbeans/api/html/lexer/HTMLTokenId.java,v <-- HTMLTokenId.java new revision: 1.4; previous revision: 1.3 done Checking in lexer/src/org/netbeans/lib/lexer/LexerSpiPackageAccessor.java; /cvs/lexer/src/org/netbeans/lib/lexer/LexerSpiPackageAccessor.java,v <-- LexerSpiPackageAccessor.java new revision: 1.4; previous revision: 1.3 done Checking in lexer/src/org/netbeans/lib/lexer/LexerInputOperation.java; /cvs/lexer/src/org/netbeans/lib/lexer/LexerInputOperation.java,v <-- LexerInputOperation.java new revision: 1.3; previous revision: 1.2 done Checking in web/jspsyntax/lexer/src/org/netbeans/api/jsp/lexer/JspTokenId.java; /cvs/web/jspsyntax/lexer/src/org/netbeans/api/jsp/lexer/JspTokenId.java,v <-- JspTokenId.java new revision: 1.3; previous revision: 1.2 done Checking in lexer/test/unit/src/org/netbeans/api/lexer/LanguagePathTest.java; /cvs/lexer/test/unit/src/org/netbeans/api/lexer/LanguagePathTest.java,v <-- LanguagePathTest.java new revision: 1.5; previous revision: 1.4 done Checking in xml/lexer/src/org/netbeans/api/xml/lexer/XMLTokenId.java; /cvs/xml/lexer/src/org/netbeans/api/xml/lexer/XMLTokenId.java,v <-- XMLTokenId.java new revision: 1.3; previous revision: 1.2 done Checking in html/lexer/src/org/netbeans/lib/html/lexer/HTMLLexer.java; /cvs/html/lexer/src/org/netbeans/lib/html/lexer/HTMLLexer.java,v <-- HTMLLexer.java new revision: 1.2; previous revision: 1.1 done Checking in java/lexer/src/org/netbeans/lib/java/lexer/JavadocLexer.java; /cvs/java/lexer/src/org/netbeans/lib/java/lexer/JavadocLexer.java,v <-- JavadocLexer.java new revision: 1.3; previous revision: 1.2 done Checking in java/lexer/src/org/netbeans/lib/java/lexer/JavaStringLexer.java; /cvs/java/lexer/src/org/netbeans/lib/java/lexer/JavaStringLexer.java,v <-- JavaStringLexer.java new revision: 1.3; previous revision: 1.2 done Checking in java/lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java; /cvs/java/lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java,v <-- JavaLexer.java new revision: 1.3; previous revision: 1.2 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/state/StateLexer.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/state/StateLexer.java,v <-- StateLexer.java new revision: 1.3; previous revision: 1.2 done Checking in lexer/test/unit/src/org/netbeans/lib/lexer/test/state/StateTokenId.java; /cvs/lexer/test/unit/src/org/netbeans/lib/lexer/test/state/StateTokenId.java,v <-- StateTokenId.java new revision: 1.2; previous revision: 1.1 done Checking in web/jspsyntax/lexer/src/org/netbeans/lib/jsp/lexer/JspLexer.java; /cvs/web/jspsyntax/lexer/src/org/netbeans/lib/jsp/lexer/JspLexer.java,v <-- JspLexer.java new revision: 1.2; previous revision: 1.1 done Checking in xml/lexer/src/org/netbeans/lib/xml/lexer/XMLLexer.java; /cvs/xml/lexer/src/org/netbeans/lib/xml/lexer/XMLLexer.java,v <-- XMLLexer.java new revision: 1.2; previous revision: 1.1