ide/editor/src/main/java/org/apidesign/bck2brwsr/ide/editor/JSNI2JavaScriptBody.java
branchide
changeset 718 b93760cedf02
parent 716 8d7f8719d29c
child 719 72a100b59e88
     1.1 --- a/ide/editor/src/main/java/org/apidesign/bck2brwsr/ide/editor/JSNI2JavaScriptBody.java	Wed Feb 13 11:12:55 2013 +0100
     1.2 +++ b/ide/editor/src/main/java/org/apidesign/bck2brwsr/ide/editor/JSNI2JavaScriptBody.java	Wed Feb 13 12:45:02 2013 +0100
     1.3 @@ -55,8 +55,6 @@
     1.4  })
     1.5  public class JSNI2JavaScriptBody {
     1.6  
     1.7 -    private static final Pattern JSNIPattern = Pattern.compile("/\\*-\\{(.*)}-\\*/");
     1.8 -
     1.9      @TriggerTreeKind(Kind.METHOD)
    1.10      @Messages("ERR_JSNI2JavaScriptBody=Can convert JSNI to @JavaScriptBody")
    1.11      public static ErrorDescription computeWarning(final HintContext ctx) {
    1.12 @@ -88,7 +86,12 @@
    1.13                  case LINE_COMMENT: break;
    1.14                  case JAVADOC_COMMENT: break;
    1.15                  case BLOCK_COMMENT:
    1.16 -                    if (JSNIPattern.matcher(ts.token().text()).matches()) {
    1.17 +                    final CharSequence tok = ts.token().text();
    1.18 +                    final int l = tok.length(); 
    1.19 +                    if (l > 4 
    1.20 +                        && tok.subSequence(0, 4).toString().equals("/*-{") // NOI18N
    1.21 +                        && tok.subSequence(l - 4, l).toString().equals("}-*/") // NOI18N
    1.22 +                    ) {
    1.23                          return ts.offsetToken();
    1.24                      }
    1.25                      break;
    1.26 @@ -120,25 +123,24 @@
    1.27                  //XXX: warn?
    1.28                  return ;
    1.29              }
    1.30 -
    1.31 -            Matcher m = JSNIPattern.matcher(jsniComment.text());
    1.32 -
    1.33 -            if (!m.matches()) return ; //XXX: warn?
    1.34 +            
    1.35 +            JsniCommentTokenizer tok = new JsniCommentTokenizer();
    1.36 +            ManglingSink ms = new ManglingSink();
    1.37 +            final CharSequence cmnt = jsniComment.text();
    1.38 +            tok.process(cmnt.subSequence(4, cmnt.length() - 4), ms);
    1.39  
    1.40              TreeMaker make = ctx.getWorkingCopy().getTreeMaker();
    1.41              MethodTree mt = (MethodTree) ctx.getPath().getLeaf();
    1.42              List<LiteralTree> params = new ArrayList<LiteralTree>();
    1.43  
    1.44 -            params.add(make.Literal("this"));
    1.45 -
    1.46              for (VariableTree p : mt.getParameters()) {
    1.47                  params.add(make.Literal(p.getName().toString()));
    1.48              }
    1.49  
    1.50              AnnotationTree jsBody = make.Annotation(make.QualIdent("org.apidesign.bck2brwsr.core.JavaScriptBody"),
    1.51                  Arrays.<ExpressionTree>asList(
    1.52 -                    make.Assignment(make.Identifier("body"), make.Literal(m.group(1))),
    1.53 -                    make.Assignment(make.Identifier("args"), make.NewArray(null, Collections.<ExpressionTree>emptyList(), params))
    1.54 +                    make.Assignment(make.Identifier("args"), make.NewArray(null, Collections.<ExpressionTree>emptyList(), params)),
    1.55 +                    make.Assignment(make.Identifier("body"), make.Literal(ms.out.toString()))
    1.56                  )
    1.57              );
    1.58