diff options
author | Stephan Herrmann | 2012-01-29 18:17:03 +0000 |
---|---|---|
committer | Stephan Herrmann | 2012-01-29 18:17:03 +0000 |
commit | 3cef2f06214b2c4cd1af87f89c1fea4090a44939 (patch) | |
tree | 9a4c2655fec90eb3c3d5d2d3d566c2efe466c971 /org.eclipse.jdt.core | |
parent | 8c96cc099f10f81e20f755eb455649449892ed64 (diff) | |
download | org.eclipse.objectteams-3cef2f06214b2c4cd1af87f89c1fea4090a44939.tar.gz org.eclipse.objectteams-3cef2f06214b2c4cd1af87f89c1fea4090a44939.tar.xz org.eclipse.objectteams-3cef2f06214b2c4cd1af87f89c1fea4090a44939.zip |
Test & fix for Bug 370076 - [compiler] misplaced annotation before
labeled callin binding is silently ignored
Diffstat (limited to 'org.eclipse.jdt.core')
4 files changed, 19 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java index 3834f473c..14b0ec016 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java @@ -1887,6 +1887,8 @@ void setSourceStart(int sourceStart); int SyntaxErrorInCallinLabel = SYNTAX_RELATED + 3302; // A.3.3 int CallinReplaceKeyWordNotOptional = SYNTAX_RELATED + 3303; // A.3.3 int IllegalMappingRHSTypeParameter = SYNTAX_RELATED + 3304; // 4.3.3 + int IllegalModifierBeforeCallinLabel = SYNTAX_RELATED + 3305; // A.3.3 // FIXME: annotations are still missing from OTJLD A.3.3 + int IllegalModifierInMethodSpecRight = SYNTAX_RELATED + 3501; // A.3.5 int SyntaxErrorIllegalDeclaredLifting = SYNTAX_RELATED + 6001; // A.6(a) diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java index f7ed186f0..7276e84c2 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java @@ -2505,6 +2505,11 @@ protected void consumeCallinLabel() { } pushOnAstStack(new CallinLabel(ident, (int)(pos >>> 32), (int)pos)); + if (this.expressionLengthStack[this.expressionLengthPtr] > 0) { + Expression annot = this.expressionStack[this.expressionPtr]; + this.problemReporter().illegalModifierBeforeCallinLabel(annot.sourceStart, annot.sourceEnd); + this.expressionPtr -= this.expressionLengthStack[this.expressionLengthPtr--]; + } } private void consumeCallinModifier(int tokenID) { // CallinModifier ::= 'replace' diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java index e67589e5f..a3c2f5d17 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java @@ -11965,6 +11965,16 @@ public void illegalModifierInMethodMapping( modifiersEnd); } +public void illegalModifierBeforeCallinLabel(int modifiersStart, int modifiersEnd) +{ + this.handle( + IProblem.IllegalModifierBeforeCallinLabel, + NoArgument, + NoArgument, + modifiersStart, + modifiersEnd); +} + public void wrongModifierInCalloutMapping( AbstractMethodMappingDeclaration methodMapping, int modifiersStart, int modifiersEnd) { diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties index ae8ecfad1..1a6a5876e 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties @@ -1045,6 +1045,8 @@ 2003302 = Syntax error: callin label must be a simple name (OTJLD A.3.3). 2003303 = Callin modifier (before, after or replace) missing for callin-binding {0} (OTJLD A.3.3). 2003304 = Syntax error: right hand side of method binding does not specify type arguments (OTJLD A.3.3). +2003305 = Syntax error: callin annotations must be specified after the callin name (OTJLD A.3.3). + 2003501 = Method designator must not specify a modifier (OTJLD A.3.5). 2006001 = Syntax Error: Declared lifting type not support in this position (OTJLD A.6(a)). |