Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

121
LINES

< > BotCompany Repo | #1030951 // Add functions and classes to Gazelle BEA Loadable Utils [OK]

JavaX source code (Dynamic Module) [tags: use-pretranspiled] - run with: Stefan's OS

Uses 1113K of libraries. Click here for Pure Java version (8504L/47K).

!7

/*
How to:
-use "transpile debug" on #1031393, copy output into #1030949
-Press the "do it" button
-Manually add lambdaMapLike etc to #1030953
-Check that things still work
*/

cprint {
  transient Set<S> requestedFunctions, requestedClasses;
  transient Set<S> have, haveClasses;
  transient new Set<S> blockedFunctions;
  transient new Set<S> blockedClasses;
  transient Set<S> newFunctions, newClasses;
  transient new Set<S> imported;
  transient Set<S> importedClasses;
  transient Set<S> toImport, classesToImport;
  transient new SS modifiers;
  
  transient S loadableUtilsSnippetID = #1030952;
  transient S includeSnippetID = #1030953;
  transient S globalSnippetID = #1020737;
  transient S transpilerOutputSnippetID = #1030949;
  
  visual
    withCenteredButtons(super,
      jButton("Do it", rThreadEnter doIt));
  
  start-thread {
    LS transpilerLines = mapLines(loadSnippet(transpilerOutputSnippetID), s -> dropLeadingAngleBracketStuff(s));
    requestedFunctions = asSet(startingWithIC_dropAndTrim("Compiling function:", transpilerLines);
    requestedClasses = asSet(startingWithIC_dropAndTrim("Compiling class:", transpilerLines);
    
    print(n2(requestedFunctions, "requested function"));
    print(n2(requestedClasses, "requested class", "requested classes"));
    
    for (PairS p : parseColonPropertyPairs(lines(transpilerLines)))
      if (eqOneOf(p.a, "mapLike", "mapMethodLike", "nuLike", "lambdaMapLike", "curry1Like"))
        modifiers.put(p.b, p.a);
    print(n2(modifiers, "function modifier"));
        
    S text = loadSnippet(loadableUtilsSnippetID);
    have = asSet(lmap tok_lastIdentifier(jextractAll("please include function <id>.", text)));
    haveClasses = asSet(lmap tok_lastIdentifier(jextractAll("please include class <id>.", text)));
    
    print("Have " + n2(have, "function"));
    
    S includeSnippet = joinNemptiesWithEmptyLines(
      loadSnippet(includeSnippetID),
      loadSnippet(globalSnippetID));
    
    new Matches m;
    for (S comment : trimAll(getJavaLineComments(text))) {
      if (find3("don't include function *", comment, m))
        blockedFunctions.add($1);
      if (find3("don't include class *", comment, m))
        blockedClasses.add($1);
    }
        
    for (S comment : trimAll(getJavaLineComments(includeSnippet)))
      if (swic(comment, "don't import "))
        blockedFunctions.add(tok_lastIdentifier(comment));
        
    for (S s : jextractAll(javaTok(includeSnippet), "please include function <id>."))
      blockedFunctions.add(tok_lastIdentifier(s));
      
    print(n2(blockedFunctions, "blocked function") + ": " + blockedFunctions);
    print(n2(blockedClasses, "blocked class", "blocked classes") + ": " + blockedClasses);
    
    newFunctions = setMinusSet(setMinusSet(requestedFunctions, blockedFunctions), have);
    print(n2(newFunctions, "new function"));
    
    newClasses = setMinusSet(setMinusSet(requestedClasses, blockedClasses), haveClasses);
    print(n2(newClasses, "new class", "new classes"));
    
    for (S s : tlft(includeSnippet)) {
      s = simpleSpaces(s);
      if (startsWith(s, "import static "))
        imported.add(tok_lastIdentifier(s));
    }
    print(n2(imported, "imported function"));
    
    importedClasses = asSet(lmap tok_lastIdentifier(jextractAll("import loadableUtils.utils.<id>;", includeSnippet)));
    print(n2(importedClasses, "imported class", "imported classes"));
    
    toImport = setMinusSet(setMinusSet(have, imported), blockedFunctions);
    print(n2(toImport) + " function(s) to import");
    
    classesToImport = setMinusSet(haveClasses, importedClasses);
    print(n2(classesToImport) + " class(es) to import");
  }
  
  // appends to Loadable Utils snippet
  void appendThem {
    if (empty(newFunctions) && empty(newClasses)) ret with print("Nothing to do");
    S text = loadSnippet(loadableUtilsSnippetID);
    text += "\n\n"
      + mapToLines(newFunctions, f -> "please include function " + f + ".")
      + mapToLines(newClasses, c -> "please include class " + c + ".");
    editSnippet(loadableUtilsSnippetID, text);
  }
  
  // appends to Compact Module Include
  void appendImported {
    if (empty(toImport) && empty(classesToImport)) ret with print("Nothing to do");
    S text = loadSnippet(includeSnippetID);
    text += "\n\n"
      + mapToLines(toImport, f -> "import static loadableUtils.utils."
        + appendSpaceIfNempty(modifiers.get(f))
        + f + ";")
      + mapToLines(classesToImport, c -> "import loadableUtils.utils." + c + ";");
    editSnippet(includeSnippetID, text);
  }
  
  void doIt {
    appendThem();
    appendImported();
  }
}

download  show line numbers  debug dex  old transpilations   

Travelled to 4 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, vouqrxazstgt

No comments. add comment

Snippet ID: #1030951
Snippet name: Add functions and classes to Gazelle BEA Loadable Utils [OK]
Eternal ID of this version: #1030951/27
Text MD5: 8c1c1f66cdb5c7688c07f2e2fa9442af
Transpilation MD5: 361dd1a27598c986e74115b4e573f3db
Author: stefan
Category: javax
Type: JavaX source code (Dynamic Module)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2021-09-18 16:52:57
Source code size: 4766 bytes / 121 lines
Pitched / IR pitched: No / No
Views / Downloads: 237 / 511
Version history: 26 change(s)
Referenced in: #1030952 - Loadable Utils for Gazelle BEA [LIVE, see #1030953, edited by #1030951]
#1030953 - Compact Module Include for Gazelle BEA (edited by #1030951)
#1033503 - LoadableUtilsExpander
#1034511 - LoadableUtilsHelper