2
2
3
3
import java .util .ArrayList ;
4
4
import java .util .HashMap ;
5
+ import java .util .HashSet ;
5
6
import java .util .LinkedList ;
6
7
import java .util .List ;
7
8
import java .util .Map ;
8
9
import java .util .Set ;
9
10
10
11
import org .eclipse .core .runtime .IPath ;
12
+ import org .eclipse .core .runtime .Path ;
11
13
12
- import io .sloeber .core .api .IArduinoLibraryVersion ;
13
- import io .sloeber .core .api .IExample ;
14
+ import io .sloeber .core .api .LibraryManager ;
14
15
import io .sloeber .providers .ESP32 ;
15
16
import io .sloeber .providers .MCUBoard ;
16
17
import io .sloeber .providers .Teensy ;
17
18
18
- @ SuppressWarnings ("nls" )
19
- public class Example implements IExample {
20
- private String myFQN ;
21
- private String myLibName ;
22
- private IPath myPath ;
19
+ @ SuppressWarnings ({ "nls" })
20
+ public class Example extends io .sloeber .core .internal .Example {
23
21
private AttributesCode myRequiredBoardAttributes ;
24
22
private static int noBoardFoundCount = 0 ;
25
23
24
+
26
25
public AttributesCode getRequiredBoardAttributes () {
27
26
return myRequiredBoardAttributes ;
28
27
}
29
28
30
29
public Example (String fqn , IPath path ) throws Exception {
31
- myFQN = fqn ;
32
- myPath = path ;
33
- calcLibName ();
30
+ myFQN = Path .fromPortableString (fqn );
31
+ myExampleLocation = path ;
32
+ String libName =calcLibName ();
33
+ if (libName !=null &&(!libName .isBlank ())) {
34
+ Set <String >libNames =new HashSet <>();
35
+ libNames .add (libName );
36
+ myLibs =LibraryManager .getLatestInstallableLibraries (libNames );
37
+ }
34
38
myRequiredBoardAttributes = new AttributesCode (fqn );
35
- myRequiredBoardAttributes .serial = examplesUsingSerial ().contains (myFQN );
36
- myRequiredBoardAttributes .serial1 = examplesUsingSerial1 ().contains (myFQN );
37
- myRequiredBoardAttributes .serialUSB = examplesUsingSerialUSB ().contains (myFQN );
38
- myRequiredBoardAttributes .keyboard = examplesUsingKeyboard ().contains (myFQN );
39
- myRequiredBoardAttributes .flightSim = examplesUsingFlightSim ().contains (myFQN );
40
- myRequiredBoardAttributes .joyStick = examplesUsingJoyStick ().contains (myFQN );
41
- myRequiredBoardAttributes .mouse = examplesUsingMouse ().contains (myFQN );
42
- myRequiredBoardAttributes .tone = examplesUsingTone ().contains (myFQN );
43
- myRequiredBoardAttributes .wire1 = examplesUsingWire1 ().contains (myFQN );
44
- myRequiredBoardAttributes .buildInLed = myFQN .contains ("Blink" )||examplesUsingBuildInLed ().contains (myFQN );
45
- myRequiredBoardAttributes .midi = examplesUsingMidi ().contains (myFQN ) || myFQN .contains ("USB_MIDI" );
46
- // myRequiredBoardAttributes.teensy = myFQN .startsWith("Example/Teensy");
47
- myRequiredBoardAttributes .worksOutOfTheBox = !failingExamples ().contains (myFQN );
48
- myRequiredBoardAttributes .myCompatibleBoardIDs .add ( getRequiredBoardID (myFQN ));
39
+ myRequiredBoardAttributes .serial = examplesUsingSerial ().contains (fqn );
40
+ myRequiredBoardAttributes .serial1 = examplesUsingSerial1 ().contains (fqn );
41
+ myRequiredBoardAttributes .serialUSB = examplesUsingSerialUSB ().contains (fqn );
42
+ myRequiredBoardAttributes .keyboard = examplesUsingKeyboard ().contains (fqn );
43
+ myRequiredBoardAttributes .flightSim = examplesUsingFlightSim ().contains (fqn );
44
+ myRequiredBoardAttributes .joyStick = examplesUsingJoyStick ().contains (fqn );
45
+ myRequiredBoardAttributes .mouse = examplesUsingMouse ().contains (fqn );
46
+ myRequiredBoardAttributes .tone = examplesUsingTone ().contains (fqn );
47
+ myRequiredBoardAttributes .wire1 = examplesUsingWire1 ().contains (fqn );
48
+ myRequiredBoardAttributes .buildInLed = fqn .contains ("Blink" )||examplesUsingBuildInLed ().contains (fqn );
49
+ myRequiredBoardAttributes .midi = examplesUsingMidi ().contains (fqn ) || fqn .contains ("USB_MIDI" );
50
+ // myRequiredBoardAttributes.teensy = fqn .startsWith("Example/Teensy");
51
+ myRequiredBoardAttributes .worksOutOfTheBox = !failingExamples ().contains (fqn );
52
+ myRequiredBoardAttributes .myCompatibleBoardIDs .add ( getRequiredBoardID (fqn ));
49
53
// myRequiredBoardAttributes.mo_mcu = examplesUsingMCUmo().contains(fqn);
50
- myRequiredBoardAttributes .rawHID = myFQN .contains ("USB_RawHID" );
54
+ myRequiredBoardAttributes .rawHID = fqn .contains ("USB_RawHID" );
51
55
52
- myRequiredBoardAttributes .myNumAD = getNumADCUsedInExample (myFQN );
53
- myRequiredBoardAttributes .directMode = examplesUsingDirectMode ().contains (myFQN );
56
+ myRequiredBoardAttributes .myNumAD = getNumADCUsedInExample (fqn );
57
+ myRequiredBoardAttributes .directMode = examplesUsingDirectMode ().contains (fqn );
54
58
55
59
myRequiredBoardAttributes .myCompatibleBoardIDs .remove (null );
56
- myRequiredBoardAttributes = myRequiredBoardAttributes .or (Libraries .getCodeAttributes (myPath ));
60
+ myRequiredBoardAttributes = myRequiredBoardAttributes .or (Libraries .getCodeAttributes (myExampleLocation ));
57
61
}
58
62
59
63
@@ -71,27 +75,19 @@ private static int getNumADCUsedInExample(String myFQN2) {
71
75
}
72
76
}
73
77
74
- private void calcLibName () {
75
- myLibName = new String ();
76
- String [] splits = myFQN .split ("/" );
77
- if (splits .length == 4 ) {
78
- if ("Library" .equals (splits [0 ])) {
79
- myLibName = splits [2 ];
78
+ String calcLibName () {
79
+ if (myFQN .segmentCount () == 4 ) {
80
+ if ("Library" .equals (myFQN .segment (0 ))) {
81
+ return myFQN .segment (2 );
80
82
}
81
83
}
84
+ return null ;
82
85
}
83
86
84
87
85
- public String getLibName () {
86
- return myLibName ;
87
- }
88
88
89
89
public String getFQN () {
90
- return myFQN ;
91
- }
92
-
93
- public String getInoName () {
94
- return myPath .lastSegment ();
90
+ return myFQN .toString ();
95
91
}
96
92
97
93
private static LinkedList <String > examplesUsingMidi () {
@@ -455,7 +451,7 @@ private static LinkedList<String> failingExamples() {
455
451
* empty returns the best known boarddescriptor to run this example
456
452
*/
457
453
public static MCUBoard pickBestBoard (Example example , MCUBoard myBoards []) {
458
- String libName = example .getLibName ();
454
+ String libName = example .calcLibName ();
459
455
String fqn = example .getFQN ();
460
456
if (myBoards .length == 0 ) {
461
457
//No boards =>no match
@@ -594,41 +590,6 @@ private static String getRequiredBoardID(String fqn) {
594
590
595
591
}
596
592
597
- @ Override
598
- public IArduinoLibraryVersion getArduinoLibrary () {
599
- // as these are examples (not from libs but ide examples
600
- //the lib is null
601
- //I may fake a lib in the future
602
- return null ;
603
- }
604
-
605
- @ Override
606
- public IPath getCodeLocation () {
607
- return myPath ;
608
- }
609
-
610
- @ Override
611
- public String getName () {
612
- return getInoName ();
613
- }
614
-
615
- @ Override
616
- public String getID () {
617
- return "example " +getName ();
618
- }
619
-
620
- @ Override
621
- public String [] getBreadCrumbs () {
622
- // Not needed for test as this is only used in the ui
623
- return null ;
624
- }
625
-
626
- @ Override
627
- public String toSaveString () {
628
- // Not needed for test as this is only used in the ui
629
- return null ;
630
- }
631
-
632
593
public boolean worksOnBoard (MCUBoard board ) {
633
594
if (board .getBoardDescriptor () == null ) {
634
595
return false ;
@@ -648,7 +609,7 @@ public boolean worksOnBoard(MCUBoard board) {
648
609
/*
649
610
* the servo lib does not work on gemma
650
611
*/
651
- if ("Servo" .equalsIgnoreCase (getLibName ())) {
612
+ if ("Servo" .equalsIgnoreCase (calcLibName ())) {
652
613
if ("gemma" .equals ( board .getBoardDescriptor ().getBoardID ()) ) {
653
614
return false ;
654
615
}
0 commit comments