mirror of
https://github.com/processing/processing4.git
synced 2026-06-16 04:26:26 +02:00
Closes #290: Support detection of mixed modes in preproc.
Make a more friendly error message when the user is mixing modes, allowing for localization of error.
This commit is contained in:
@@ -415,6 +415,7 @@ editor.status.bad.generic = Possibly missing type in generic near '%s'?
|
||||
editor.status.bad.identifier = Bad identifier? Did you forget a variable or start an identifier with digits near '%s'?
|
||||
editor.status.bad.parameter = Error on parameter or method declaration near '%s'?
|
||||
editor.status.bad.import = Import not allowed here.
|
||||
editor.status.bad.mixed_mode = You may be mixing active and static modes which is not allowed.
|
||||
editor.status.extraneous = Incomplete statement or extra code near '%s'?
|
||||
editor.status.mismatched = Missing operator, semicolon, or '}' near '%s'?
|
||||
editor.status.missing.name = Missing name or ; near '%s'?
|
||||
@@ -644,4 +645,4 @@ movie_maker.progress.creating_output_file = Creating output file
|
||||
movie_maker.progress.initializing = Initializing...
|
||||
movie_maker.progress.processing = Processing %s.
|
||||
|
||||
movie_maker.progress.handling_frame = Converting frame %s of %s...
|
||||
movie_maker.progress.handling_frame = Converting frame %s of %s...
|
||||
|
||||
@@ -387,6 +387,7 @@ editor.status.bad.identifier = Error en este identificador? Es posible que tu ol
|
||||
editor.status.bad.generic = Error en genérico cerca '%s'. Falta un tipo?
|
||||
editor.status.bad.parameter = Error en un parámetro o una declaración de método cerca '%s'?
|
||||
editor.status.bad.import = Una declaración de importación no es permitida en una definición de una clasa.
|
||||
editor.status.bad.mixed_mode = Es possible que estás usando el modo estático y activo.
|
||||
editor.status.extraneous = Una declaración incompleta o un imprevisto clave cerca '%s'?
|
||||
editor.status.mismatched = Falta un punto y coma, un operador, o un '}' cerca '%s'?
|
||||
editor.status.missing.name = Falta ; o nombre cerca '%s'?
|
||||
|
||||
@@ -316,6 +316,23 @@ public class PdeParseTreeListener extends ProcessingBaseListener {
|
||||
footerResult = prepareFooter(rewriter, length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enterWarnMixedModes(ProcessingParser.WarnMixedModesContext ctx) {
|
||||
pdeParseTreeErrorListenerMaybe.ifPresent((listener) -> {
|
||||
Token token = ctx.getStart();
|
||||
int line = token.getLine();
|
||||
int charOffset = token.getCharPositionInLine();
|
||||
|
||||
listener.onError(new PdePreprocessIssue(
|
||||
line,
|
||||
charOffset,
|
||||
PreprocessIssueMessageSimplifier.getLocalStr(
|
||||
"editor.status.bad.mixed_mode"
|
||||
)
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Endpoint for ANTLR to call when finished parsing a method invocatino.
|
||||
*
|
||||
@@ -770,7 +787,7 @@ public class PdeParseTreeListener extends ProcessingBaseListener {
|
||||
* @return True if setup and false otherwise.
|
||||
*/
|
||||
protected boolean isMethodSetup(ParserRuleContext declaration) {
|
||||
if (declaration.getChildCount() < 2) {
|
||||
if (declaration == null || declaration.getChildCount() < 2) {
|
||||
return false;
|
||||
}
|
||||
return declaration.getChild(1).getText().equals("setup");
|
||||
|
||||
@@ -23,6 +23,7 @@ processingSketch
|
||||
: javaProcessingSketch
|
||||
| staticProcessingSketch
|
||||
| activeProcessingSketch
|
||||
| warnMixedModes
|
||||
;
|
||||
|
||||
// java mode, is a compilation unit
|
||||
@@ -30,20 +31,26 @@ javaProcessingSketch
|
||||
: packageDeclaration? importDeclaration* typeDeclaration+ EOF
|
||||
;
|
||||
|
||||
// No method declarations, just statements
|
||||
staticProcessingSketch
|
||||
: (importDeclaration | blockStatement)* EOF
|
||||
;
|
||||
|
||||
// active mode, has function definitions
|
||||
activeProcessingSketch
|
||||
: (importDeclaration | classBodyDeclaration)* EOF
|
||||
;
|
||||
: (importDeclaration | classBodyDeclaration)* EOF
|
||||
;
|
||||
|
||||
variableDeclaratorId
|
||||
: warnTypeAsVariableName
|
||||
| IDENTIFIER ('[' ']')*
|
||||
;
|
||||
|
||||
warnMixedModes
|
||||
: (importDeclaration | classBodyDeclaration | blockStatement)* blockStatement classBodyDeclaration (importDeclaration | classBodyDeclaration | blockStatement)*
|
||||
| (importDeclaration | classBodyDeclaration | blockStatement)* classBodyDeclaration blockStatement (importDeclaration | classBodyDeclaration | blockStatement)*
|
||||
;
|
||||
|
||||
// bug #93
|
||||
// https://github.com/processing/processing/issues/93
|
||||
// prevent from types being used as variable names
|
||||
|
||||
@@ -405,4 +405,9 @@ public class ParserTests {
|
||||
expectGood("sizethis");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMixing() {
|
||||
expectRunnerException("mixing", 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user