![Page 1: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/1.jpg)
Sweet Talk (part 2)Tool Support for Sweet
Phil Quitslund
![Page 2: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/2.jpg)
Plan
1. Sweet Tooling issues
2. Introduction to Eclipse
3. Sweet Plugin at a glance
4. Implementation notes
5. Pitch and Caveats
6. Where next
![Page 3: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/3.jpg)
Plan
1. Sweet Tooling issues
2. Introduction to Eclipse
3. Sweet Plugin at a glance
4. Implementation notes
5. Pitch and Caveats
6. Where next
![Page 4: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/4.jpg)
Automating the BuildThe Problem: Manual builds considered painful
![Page 5: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/5.jpg)
Automating the Build
• generative techniques require extra steps to stage builds
The Problem: Manual builds considered painful
![Page 6: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/6.jpg)
Automating the Build
• generative techniques require extra steps to stage builds
The Problem: Manual builds considered painful
the rub: manual builds hurt and interrupt programmer flow
![Page 7: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/7.jpg)
public abstract class List { public case Nil public case Cons(private int head, private List tail)}
public int length() case List abstract; case Nil { return 0; } case Cons { return 1 + tail.length(); }
Automating the Build
![Page 8: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/8.jpg)
Automating the Build
public abstract class List { public case Nil public case Cons(private int head, private List tail)}
public int length() case List abstract; case Nil { return 0; } case Cons { return 1 + tail.length(); }
![Page 9: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/9.jpg)
Automating the Build
3 “Introductions”
public abstract class List { public case Nil public case Cons(private int head, private List tail)}
public int length() case List abstract; case Nil { return 0; } case Cons { return 1 + tail.length(); }
![Page 10: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/10.jpg)
Automating the Build
public abstract class List { public case Nil public case Cons(private int head, private List tail)}
public int length() case List abstract; case Nil { return 0; } case Cons { return 1 + tail.length(); }
![Page 11: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/11.jpg)
Automating the Build
repositoryS
![Page 12: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/12.jpg)
Automating the Build
repository
J
J
JS
![Page 13: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/13.jpg)
Automating the Build
repository
J
J
JS
C
C
C
![Page 14: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/14.jpg)
Managing DependenciesThe Problem: Crufty Orphans
![Page 15: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/15.jpg)
Managing Dependencies
• generated files are "orphaned" when their introductions get removed.
The Problem: Crufty Orphans
![Page 16: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/16.jpg)
Managing Dependencies
• generated files are "orphaned" when their introductions get removed.
The Problem: Crufty Orphans
the rub: manual maintenance is tedious and error prone
![Page 17: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/17.jpg)
Managing Dependencies
repository
J
J
JS
C
C
C
![Page 18: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/18.jpg)
Managing Dependencies
repository
J
J
JS
C
C
C
![Page 19: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/19.jpg)
Managing Dependencies
repository
J
J
JS
C
C
C
![Page 20: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/20.jpg)
Managing Dependencies
repository
J
J
JS
C
C
C
![Page 21: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/21.jpg)
Managing Dependencies
repository
J
J
S
C
C
C
![Page 22: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/22.jpg)
Managing Dependencies
repository
J
J
S
C
C
![Page 23: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/23.jpg)
Managing Dependencies
repository
J
J
S
C
C
Done manually this is tedious and prone to error!
![Page 24: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/24.jpg)
Error Handling
The Problem: Say What?
![Page 25: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/25.jpg)
Error Handling
• Errors in generated files can be hard to trace back to their source
The Problem: Say What?
![Page 26: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/26.jpg)
Error Handling
• Errors in generated files can be hard to trace back to their source
The Problem: Say What?
the rub: indirection decreases understandability
![Page 27: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/27.jpg)
public abstract class List { public case Nil public case Cons(private int head, private List tail)}
public int length() case List abstract; case Nil { return 0; } case Cons { return 1 + tail.length(); }
Error Reporting
![Page 28: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/28.jpg)
public abstract class List { public case Nil public case Cons(private int head, private List tail)}
public int length() case List abstract; case Nil { return 0; } case Cons { return 1 + tail.length(); }
Error Reporting
Legal Sweet
![Page 29: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/29.jpg)
public abstract class List { public case Nil public case Cons(private int head, private List tail)}
public int length() case List abstract; case Nil { return 0; } case Cons { return 1 + tail.length(); } case Nil { return 1; }
Error Reporting
Legal Sweet?
![Page 30: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/30.jpg)
Error Reporting
public abstract class List { public case Nil public case Cons(private int head, private List tail)}
public int length() case List abstract; case Nil { return 0; } case Cons { return 1 + tail.length(); } case Nil { return 1; }
Legal Sweet? Nope…
![Page 31: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/31.jpg)
Error Reporting
Conflicting declarations
public abstract class List { public case Nil public case Cons(private int head, private List tail)}
public int length() case List abstract; case Nil { return 0; } case Cons { return 1 + tail.length(); } case Nil { return 1; }
![Page 32: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/32.jpg)
Error Reporting (from 10,000ft)
repository
S
S
S
![Page 33: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/33.jpg)
Error Reporting (from 10,000ft)
repository
S
S
S
![Page 34: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/34.jpg)
Error Reporting (from 10,000ft)
repository
S
S
S
![Page 35: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/35.jpg)
Error Reporting (from 10,000ft)
repository
S
S
S
![Page 36: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/36.jpg)
Error Reporting (from 10,000ft)
repository
S
S
S
![Page 37: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/37.jpg)
Plan
1. Sweet Tooling issues
2. Introduction to Eclipse
3. Sweet Plugin at a glance
4. Implementation notes
5. Pitch and Caveats
6. Where next
![Page 38: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/38.jpg)
What is Eclipse?
• A universal platform for integrating development tools– “An IDE for everything and nothing in
particular”
• An open, extensible architecture based on plug-ins
![Page 39: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/39.jpg)
What is Eclipse? (a picture)
Platform Runtime
Workspace
Help
Team
Workbench
JFace
SWT
Eclipse Project
JavaDevelopment
Tools(JDT)
Stellation
SweetPlugin
AnotherTool
Plug-inDevelopmen
tEnvironment
(PDE)
Eclipse Platform
Debug
![Page 40: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/40.jpg)
What is Eclipse?
• Lot’s for free (well almost)– Tight integration of common core tools
• CVS, Ant, JUnit, diff
– Extensible/open architecture
• Third-party plugins– ruby, c#, php, etc.– AOSD (aspectJ, hyperJ, FEAT, JQuery, etc)
![Page 41: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/41.jpg)
Plan
1. Sweet Tooling issues
2. Introduction to Eclipse
3. Sweet Plugin at a glance
4. Implementation notes
5. Pitch and Caveats
6. Where next
![Page 42: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/42.jpg)
Plugin Features
• Keyword awareness
• Integrated SweetBuilder
• Automated House-Cleaning
• Artifact Special Treatment
• Basic Error-Reporting
• Integrated Help
![Page 43: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/43.jpg)
DEMO!!
Cross fingers please…
![Page 44: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/44.jpg)
Plan
1. Sweet Tooling issues
2. Introduction to Eclipse
3. Sweet Plugin at a glance
4. Implementation notes
5. Pitch and Caveats
6. Where next
![Page 45: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/45.jpg)
Automating the Build (Impl.)
- Eclipse leverages the Observer (Listener) Design Pattern
The idea is to register listeners to monitor for changes to resources that should trigger a build.
![Page 46: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/46.jpg)
Automating the Build (Impl.)
• Our pipeline:
![Page 47: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/47.jpg)
Automating the Build (Impl.)
• Ordered list of builders
• Insert SweetBuilder before JavaBuilder
• Our pipeline:
SB
JB
![Page 48: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/48.jpg)
Managing Dependencies (Impl.)
/
pkgA pkgB pkgC
ouptut/
pkgA pkgB pkgC
Possible Approach: Parallel Worlds
![Page 49: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/49.jpg)
Managing Dependencies (Impl.)
/
pkgA pkgB pkgC
ouptut/
pkgA pkgB pkgC
Possible Approach: Parallel Worlds
Possible Solution: “make clean”
![Page 50: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/50.jpg)
Managing Dependencies (Impl.)
- Complete rebuild
- Worst case every Java file re-compiled
- File-based
- subtler: de-values artifacts• In a multi-view setting should be first-class!
Parallel Worlds Disadvantages
![Page 51: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/51.jpg)
Managing Dependencies (Impl.)
- Use Sweet Parser to collect Introductions
- Store in Resource object metadata
Advantages:– Persistence for free– Limited introduction/deletion ripple
Better: Mapping
![Page 52: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/52.jpg)
Error Reporting (Impl.)
- Should be integrated into environment- Shouldn’t re-route programmer flow- Minimize dissonance
Ideal: Handle Like Errors NOT Exceptions!
![Page 53: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/53.jpg)
Error Reporting (Impl.)
- Extended Sweet Handler to collect Problem data
- Data marshalled into a Marker object
- Attached to Eclipse Resource
Result:
- visual (localized) cues, persistence, navigability
Eclipse Resource Marker Strategy
![Page 54: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/54.jpg)
Plan
1. Sweet Tooling issues
2. Introduction to Eclipse
3. Sweet Plugin at a glance
4. Implementation notes
5. Pitch and Caveats
6. Where next
![Page 55: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/55.jpg)
Pitch
• Nice vision– “user as programmer”
• Nice Execution– Mature tool for Java and Plugin Development
• Growing market share– Research and Industry
• Active Developer Community• In short: a viable tool to leverage now
– http://www.eclipse.org
![Page 56: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/56.jpg)
Caveats
• Steep Initial Learning Curve
• Lagging Documentation– but “system is the curriculum…”
• Designer Bias– “strong world view”– pervasively file-oriented
![Page 57: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/57.jpg)
Plan
1. Sweet Tooling issues
2. Introduction to Eclipse
3. Sweet Plugin at a glance
4. Implementation notes
5. Pitch and Caveats
6. Where next
![Page 58: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/58.jpg)
Where next
• Short Term– Plugin improvements
• Export metadata (introductions) to Ant• More sophisticated Error Reporting• Context visualization
– Sweet Programming Guide
• Long Term– Multi-view support
![Page 59: Sweet Talk (part 2) Tool Support for Sweet Phil Quitslund](https://reader035.vdocuments.net/reader035/viewer/2022062421/56649d545503460f94a306ca/html5/thumbnails/59.jpg)
Programming in the 21st century
• Emphasis on“ilities”– Reusability, evolvability, etc.– What about the “archies?” (hier/heter)
• The rub: current SOC technologies (HyperJ, AspectJ, etc) depose the dominant decomposition only to replace it with their own!
• It remains to be seen if their decomposition is any better!• Polyphonic Programming!
• The time for multi-view AOSD Tool-support is now!