Skip to content

Commit e5cb975

Browse files
committed
Dialog select class to run
1 parent 8b065a9 commit e5cb975

File tree

5 files changed

+100
-10
lines changed

5 files changed

+100
-10
lines changed

app/src/main/java/com/duy/ide/editor/code/MainActivity.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@
4646
import com.duy.android.compiler.builder.IBuilder;
4747
import com.duy.android.compiler.builder.JavaBuilder;
4848
import com.duy.android.compiler.project.AndroidAppProject;
49+
import com.duy.android.compiler.project.FileCollection;
4950
import com.duy.android.compiler.project.JavaProject;
5051
import com.duy.android.compiler.project.JavaProjectManager;
52+
import com.duy.android.compiler.utils.ProjectUtils;
5153
import com.duy.ide.Builder;
5254
import com.duy.ide.MenuEditor;
5355
import com.duy.ide.R;
@@ -67,6 +69,7 @@
6769
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
6870

6971
import java.io.File;
72+
import java.io.FileFilter;
7073
import java.io.IOException;
7174
import java.util.ArrayList;
7275

@@ -318,15 +321,7 @@ public void onComplete() {
318321
mHandler.postDelayed(new Runnable() {
319322
@Override
320323
public void run() {
321-
File currentFile = getCurrentFile();
322-
if (currentFile == null || !currentFile.getName().endsWith(".java")) {
323-
String message = getString(R.string.main_class_not_found);
324-
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
325-
}
326-
Intent intent = new Intent(MainActivity.this, ExecuteActivity.class);
327-
intent.putExtra(ExecuteActivity.DEX_FILE, mProject.getDexFile());
328-
intent.putExtra(ExecuteActivity.MAIN_CLASS_FILE, currentFile);
329-
startActivity(intent);
324+
runJava(mProject);
330325
}
331326
}, 200);
332327
}
@@ -335,6 +330,42 @@ public void run() {
335330
buildTask.execute();
336331
}
337332

333+
private void runJava(final JavaProject project) {
334+
final File currentFile = getCurrentFile();
335+
if (currentFile == null || !ProjectUtils.isFileBelongProject(project, currentFile)) {
336+
ArrayList<File> javaSrcDirs = new ArrayList<>();
337+
javaSrcDirs.add(project.getJavaSrcDir());
338+
FileCollection fileCollection = new FileCollection(javaSrcDirs);
339+
final ArrayList<File> javaSources = fileCollection.filter(new FileFilter() {
340+
@Override
341+
public boolean accept(File pathname) {
342+
return pathname.isFile() && pathname.getName().endsWith(".java");
343+
}
344+
});
345+
AlertDialog.Builder builder = new AlertDialog.Builder(this);
346+
String[] names = new String[javaSources.size()];
347+
for (int i = 0; i < javaSources.size(); i++) {
348+
names[i] = javaSources.get(i).getName();
349+
}
350+
builder.setTitle(R.string.select_class_to_run);
351+
builder.setItems(names, new DialogInterface.OnClickListener() {
352+
@Override
353+
public void onClick(DialogInterface dialog, int which) {
354+
Intent intent = new Intent(MainActivity.this, ExecuteActivity.class);
355+
intent.putExtra(ExecuteActivity.DEX_FILE, project.getDexFile());
356+
intent.putExtra(ExecuteActivity.MAIN_CLASS_FILE, javaSources.get(which));
357+
startActivity(intent);
358+
}
359+
});
360+
builder.create().show();
361+
} else {
362+
Intent intent = new Intent(MainActivity.this, ExecuteActivity.class);
363+
intent.putExtra(ExecuteActivity.DEX_FILE, project.getDexFile());
364+
intent.putExtra(ExecuteActivity.MAIN_CLASS_FILE, currentFile);
365+
startActivity(intent);
366+
}
367+
}
368+
338369
/**
339370
* replace dialog find
340371
*/

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,5 +489,6 @@
489489
<string name="compiler_setting">Compiler setting</string>
490490
<string name="message_open_examples">This action will be create new project, previous project will be close</string>
491491
<string name="warning">Warning</string>
492+
<string name="select_class_to_run">Select class to run</string>
492493

493494
</resources>

lib-android-compiler/src/main/java/com/duy/android/compiler/project/ClassUtil.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ public class ClassUtil {
1919
Pattern.DOTALL);
2020
}
2121

22-
22+
/**
23+
* fast resolve main method, no need to parse java file
24+
*/
2325
public static boolean hasMainFunction(File file) {
2426
try {
2527
String s = org.apache.commons.io.IOUtils.toString(new FileInputStream(file));
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.duy.android.compiler.project;
2+
3+
4+
import java.io.File;
5+
import java.io.FileFilter;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
public class FileCollection {
10+
private List<File> rootDirs;
11+
12+
public FileCollection(List<File> rootDirs) {
13+
this.rootDirs = rootDirs;
14+
}
15+
16+
public ArrayList<File> filter(FileFilter fileFilter) {
17+
ArrayList<File> files = new ArrayList<>();
18+
for (File rootDir : rootDirs) {
19+
filter(rootDir, files, fileFilter);
20+
}
21+
return files;
22+
}
23+
24+
private void filter(File file, ArrayList<File> result, FileFilter fileFilter) {
25+
if (file.isDirectory()) {
26+
for (File child : file.listFiles()) {
27+
filter(child, result, fileFilter);
28+
}
29+
} else {
30+
if (fileFilter.accept(file)) {
31+
result.add(file);
32+
}
33+
}
34+
}
35+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.duy.android.compiler.utils;
2+
3+
import com.duy.android.compiler.project.JavaProject;
4+
5+
import java.io.File;
6+
import java.io.IOException;
7+
8+
public class ProjectUtils {
9+
public static boolean isFileBelongProject(JavaProject project, File file) {
10+
if (file == null || project == null) {
11+
return false;
12+
}
13+
try {
14+
File rootDir = project.getRootDir();
15+
return file.getCanonicalPath().startsWith(rootDir.getCanonicalPath());
16+
} catch (IOException e) {
17+
e.printStackTrace();
18+
}
19+
return false;
20+
}
21+
}

0 commit comments

Comments
 (0)