This is an automated email from the git hooks/post-receive script. mquinson pushed a commit to branch debian in repository plm.
commit 44bf2b2493d0efb771c36f93423990d487eb590c Author: Martin Quinson <[email protected]> Date: Fri Oct 24 21:00:05 2014 +0200 Kill all parts of scala since the debian package lags behind That's a pity, but there is nothing I can do right now --- debian/patches/no-github | 209 +++++++++++++ debian/patches/no-scala | 747 +++++++++++++++++++++++++++++++++++++++++++++-- debian/patches/series | 1 + 3 files changed, 938 insertions(+), 19 deletions(-) diff --git a/debian/patches/no-github b/debian/patches/no-github new file mode 100644 index 0000000..acde146 --- /dev/null +++ b/debian/patches/no-github @@ -0,0 +1,209 @@ +--- + src/plm/core/ui/FeedbackDialog.java | 161 ------------------------------------ + src/plm/core/ui/MainFrame.java | 13 -- + 2 files changed, 1 insertion(+), 173 deletions(-) + +Index: b/src/plm/core/ui/FeedbackDialog.java +=================================================================== +--- a/src/plm/core/ui/FeedbackDialog.java ++++ /dev/null +@@ -1,161 +0,0 @@ +-package plm.core.ui; +- +-import java.awt.BorderLayout; +-import java.awt.Color; +-import java.awt.Dimension; +-import java.awt.Label; +-import java.awt.event.ActionEvent; +-import java.awt.event.ActionListener; +-import java.io.IOException; +- +-import javax.swing.JButton; +-import javax.swing.JDialog; +-import javax.swing.JEditorPane; +-import javax.swing.JOptionPane; +-import javax.swing.JPanel; +-import javax.swing.JScrollPane; +-import javax.swing.JTextField; +-import javax.swing.ScrollPaneConstants; +- +-import org.eclipse.egit.github.core.Issue; +-import org.eclipse.egit.github.core.client.GitHubClient; +-import org.eclipse.egit.github.core.service.IssueService; +-import org.xnap.commons.i18n.I18n; +-import org.xnap.commons.i18n.I18nFactory; +- +-import plm.core.model.Game; +-import plm.core.model.lesson.Exercise; +-import plm.core.model.lesson.Exercise.WorldKind; +-import plm.core.model.tracking.GitUtils; +-import plm.universe.World; +- +-public class FeedbackDialog extends JDialog { +- +- private static final long serialVersionUID = 0; +- private static FeedbackDialog instance = null; +- +- public I18n i18n = I18nFactory.getI18n(getClass(), "org.plm.i18n.Messages", getLocale(), I18nFactory.FALLBACK); +- final JEditorPane feedback = new JEditorPane(); +- final JTextField title = new JTextField(); +- +- public static FeedbackDialog getInstance() { +- if (FeedbackDialog.instance == null) { +- FeedbackDialog.instance = new FeedbackDialog(); +- } +- StringBuffer worldInfo = new StringBuffer(); +- for (World w:((Exercise)Game.getInstance().getCurrentLesson().getCurrentExercise()).getWorlds(WorldKind.ANSWER)) { +- String s = w.getDebugInfo(); +- if (s != "") +- worldInfo.append("World: "+s+"\n"); +- } +- +- FeedbackDialog.instance.feedback.setText(FeedbackDialog.instance.i18n.tr( +- "Please write your suggestion here, with all necessary details\n" +- + "(if possible in English or French).\n\n" +- + "When you find a typo or a sentence that is hard to understand, \n" +- + "it really helps to suggest a new wording.\n\n" +- + "If you encounter a technical bug, please tell us what you did,\n" +- + "which outcome you were expecting and what happened instead.\n\n" +- + " but DO NEVER DISCLOSE A PASSWORD to a bug tracker. Never." +- + "\n\n--------------------[ Technical Information ]--------------------\n" +- + "(This can help us fixing your problem, please don't erase)\n" +- ) /* The rest is not translated */ +- + "\nLesson: "+Game.getInstance().getCurrentLesson().getId() + "\n" +- + "Exercise: "+Game.getInstance().getCurrentLesson().getCurrentExercise().getId() + "\n" +- + worldInfo.toString() +- + "Programming Language: "+Game.getProgrammingLanguage().getLang() + "\n" +- + "Locale: "+Game.getInstance().getLocale().getDisplayName() + "\n" +- + "Java version: " + System.getProperty("java.version") + " (VM: " + System.getProperty("java.vm.name") + "; version: " + System.getProperty("java.vm.version") + ")" + "\n" +- + "OS: " + System.getProperty("os.name") + " (version: " + System.getProperty("os.version") + "; arch: " + System.getProperty("os.arch") + ")" + "\n" +- + "PLM version: " + Game.getProperty("plm.major.version", "internal", false) + " (" + Game.getProperty("plm.minor.version", "internal", false) + ")" + "\n" +- + "Public user ID: PLM"+GitUtils.sha1(Game.getInstance().getUsers().getCurrentUser().getUserUUIDasString())+ "\n"); +- +- FeedbackDialog.instance.title.setText(FeedbackDialog.instance.i18n.tr("Please describe the problem in a few words")); +- FeedbackDialog.instance.pack(); +- return FeedbackDialog.instance; +- } +- +- private FeedbackDialog() { +- super(MainFrame.getInstance(), "Report your feedback", false); +- this.setTitle(i18n.tr("Report your feedback")); +- initComponent(); +- } +- +- public void initComponent() { +- +- setLayout(new BorderLayout()); +- JPanel headerToolbar = new JPanel(); +- headerToolbar.add(new Label(i18n.tr("Issue title:"))); +- headerToolbar.add(title); +- add(headerToolbar, BorderLayout.NORTH); +- +- feedback.setBackground(Color.white); +- feedback.setOpaque(true); +- feedback.setEditable(true); +- JScrollPane jsp = new JScrollPane(feedback); +- jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); +- jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); +- add(jsp, BorderLayout.CENTER); +- +- feedback.setContentType("text/plain"); +- +- final JButton cancelBtn = new JButton(i18n.tr("Cancel")); +- cancelBtn.addActionListener(new ActionListener() { +- @Override +- public void actionPerformed(ActionEvent e) { +- int dialogResult = JOptionPane.showConfirmDialog(cancelBtn, +- i18n.tr("Do you really want to cancel your feedback and lose any edit?"), +- i18n.tr("are you sure?"), +- JOptionPane.YES_NO_OPTION); +- if (dialogResult == JOptionPane.YES_OPTION) { +- dispose(); +- } +- } +- }); +- +- final JButton sendBtn = new JButton(i18n.tr("Send feedback")); +- sendBtn.addActionListener(new ActionListener() { +- GitHubClient client = new GitHubClient(); +- +- @Override +- public void actionPerformed(ActionEvent e) { +- client.setOAuth2Token(Game.getProperty("plm.github.oauth")); +- Issue issue = new Issue(); +- issue.setTitle(title.getText()); +- issue.setBody(feedback.getText()); +- IssueService issueService = new IssueService(client); +- try { +- Issue i = issueService.createIssue(Game.getProperty("plm.github.owner"), Game.getProperty("plm.github.repo"), issue); +- JOptionPane.showMessageDialog(sendBtn, i18n.tr( +- "Thank you for your remark, we will do our best to integrate it.\n" +- + "Follow our progress at {0}.",i.getHtmlUrl()), i18n.tr("Thanks for your suggestion"), JOptionPane.INFORMATION_MESSAGE); +- dispose(); +- } catch (IOException ex) { +- StringBuffer ctn = new StringBuffer(ex.getLocalizedMessage() + "\n"); +- for (StackTraceElement elm : ex.getStackTrace()) { +- ctn.append(elm.toString()).append("\n"); +- } +- JOptionPane.showMessageDialog(cancelBtn, +- ctn.toString(), +- i18n.tr("Error while uploading your feedback"), +- JOptionPane.ERROR_MESSAGE); +- ex.printStackTrace(); +- } +- } +- }); +- +- JPanel toolbar = new JPanel(); +- toolbar.add(cancelBtn); +- toolbar.add(sendBtn); +- add(toolbar, BorderLayout.SOUTH); +- +- setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); +- pack(); +- setMinimumSize(new Dimension(200, 600)); +- setPreferredSize(new Dimension(500, 800)); +- setResizable(true); +- +- setLocationRelativeTo(getParent()); +- } +- +-} +Index: b/src/plm/core/ui/MainFrame.java +=================================================================== +--- a/src/plm/core/ui/MainFrame.java ++++ b/src/plm/core/ui/MainFrame.java +@@ -93,7 +93,7 @@ public class MainFrame extends JFrame im + + private JMenu menuLanguage, menuLangHuman, menuLangProg; + private JMenu menuHelp; +- private JMenuItem miHelpFeedback, miHelpLesson,miHelpWorld,miHelpAbout; ++ private JMenuItem miHelpLesson,miHelpWorld,miHelpAbout; + + private LoggerPanel outputArea; + private MissionEditorTabs met; +@@ -388,16 +388,6 @@ public class MainFrame extends JFrame im + menuHelp = new JMenu(i18n.tr("Help")); + menuHelp.setMnemonic(KeyEvent.VK_H); + menuBar.add(menuHelp); +- +- miHelpFeedback = new JMenuItem(new AbstractGameAction(g, i18n.tr("Provide feedback")) { +- private static final long serialVersionUID = 1L; +- +- public void actionPerformed(ActionEvent arg0) { +- FeedbackDialog.getInstance().setVisible(true); +- } +- }); +- miHelpFeedback.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, ActionEvent.CTRL_MASK)); +- menuHelp.add(miHelpFeedback); + + miHelpLesson = new JMenuItem(new AbstractGameAction(g, i18n.tr("About this lesson")) { + private static final long serialVersionUID = 1L; +@@ -760,7 +750,6 @@ public class MainFrame extends JFrame im + menuLangProg.setText(i18n.tr("Computer")); + + menuHelp.setText(i18n.tr("Help")); +- miHelpFeedback.setText(i18n.tr("Provide feedback")); + miHelpLesson.setText(i18n.tr("About this lesson")); + miHelpWorld.setText(i18n.tr("About this world")); + if (miHelpAbout != null) diff --git a/debian/patches/no-scala b/debian/patches/no-scala index d553738..2affd88 100644 --- a/debian/patches/no-scala +++ b/debian/patches/no-scala @@ -1,12 +1,12 @@ --- - src/lessons/lander/Main.fr.html | 23 - - src/lessons/lander/Main.html | 21 - + src/lessons/lander/Main.fr.html | 23 + src/lessons/lander/Main.html | 21 src/lessons/lander/Main.scala | 14 - src/lessons/lander/icon.svg | 104 ----- - src/lessons/lander/lvl1_lander_101/Lander101.fr.html | 49 -- + src/lessons/lander/icon.svg | 104 ---- + src/lessons/lander/lvl1_lander_101/Lander101.fr.html | 49 - src/lessons/lander/lvl1_lander_101/Lander101.html | 41 - - src/lessons/lander/lvl1_lander_101/Lander101.it.html | 45 -- - src/lessons/lander/lvl1_lander_101/Lander101.pt_BR.html | 45 -- + src/lessons/lander/lvl1_lander_101/Lander101.it.html | 45 - + src/lessons/lander/lvl1_lander_101/Lander101.pt_BR.html | 45 - src/lessons/lander/lvl1_lander_101/Lander101.scala | 17 src/lessons/lander/lvl1_lander_101/Lander101Entity.java | 14 src/lessons/lander/lvl1_lander_101/Lander101Entity.py | 13 @@ -15,30 +15,41 @@ src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html | 34 - src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.scala | 19 src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZoneEntity.java | 57 -- - src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZoneEntity.py | 43 -- + src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZoneEntity.py | 43 - src/lessons/lander/lvl2_locate_landing_zone/ScalaLocateLandingZoneEntity.scala | 54 -- src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.fr.html | 41 - src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html | 33 - src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.pt_BR.html | 37 - src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.scala | 20 - src/lessons/lander/lvl3_fly_the_lander/FlyTheLanderEntity.java | 48 -- - src/lessons/lander/lvl3_fly_the_lander/FlyTheLanderEntity.py | 45 -- + src/lessons/lander/lvl3_fly_the_lander/FlyTheLanderEntity.java | 48 - + src/lessons/lander/lvl3_fly_the_lander/FlyTheLanderEntity.py | 45 - src/lessons/lander/lvl3_fly_the_lander/ScalaFlyTheLanderEntity.scala | 53 -- src/lessons/lander/short_desc.fr.html | 9 src/lessons/lander/short_desc.html | 7 src/lessons/lander/universe/Configurations.scala | 77 --- - src/lessons/lander/universe/DelegatingLanderWorld.fr.html | 48 -- - src/lessons/lander/universe/DelegatingLanderWorld.html | 44 -- - src/lessons/lander/universe/DelegatingLanderWorld.java | 71 --- - src/lessons/lander/universe/DelegatingLanderWorld.pt_BR.html | 43 -- - src/lessons/lander/universe/Geometry.scala | 47 -- + src/lessons/lander/universe/DelegatingLanderWorld.fr.html | 48 - + src/lessons/lander/universe/DelegatingLanderWorld.html | 44 - + src/lessons/lander/universe/DelegatingLanderWorld.java | 71 -- + src/lessons/lander/universe/DelegatingLanderWorld.pt_BR.html | 43 - + src/lessons/lander/universe/Geometry.scala | 47 - src/lessons/lander/universe/LanderEntity.scala | 59 -- - src/lessons/lander/universe/LanderWorld.scala | 148 ------- - src/lessons/lander/universe/LanderWorldView.scala | 207 ---------- + src/lessons/lander/universe/LanderWorld.scala | 148 ----- + src/lessons/lander/universe/LanderWorldView.scala | 207 -------- + src/plm/core/lang/JVMCompiledLang.java | 9 + src/plm/core/lang/LangScala.java | 247 ---------- + src/plm/core/model/Game.java | 51 -- + src/plm/core/model/lesson/ExerciseTemplated.java | 4 + src/plm/core/model/lesson/ExerciseTemplatingEntity.java | 19 src/plm/core/ui/ChooseLessonDialog.java | 2 - src/plm/test/ExoTest.java | 2 - src/plm/test/LessonTest.java | 2 - 39 files changed, 3 insertions(+), 1689 deletions(-) + src/plm/core/ui/JavaEditorPanel.java | 2 + src/plm/core/ui/editor/MissionEditor.java | 6 + src/plm/test/ExoTest.java | 13 + src/plm/test/LessonTest.java | 10 + src/plm/test/simple/test/AllSimpleExerciseTests.java | 2 + src/plm/test/simple/test/ScalaSimpleExerciseTest.java | 52 -- + src/plm/universe/bat/BatExercise.java | 2 + src/plm/universe/bat/BatTest.java | 16 + 50 files changed, 17 insertions(+), 2104 deletions(-) Index: b/src/lessons/lander/universe/Configurations.scala =================================================================== @@ -1936,6 +1947,31 @@ Index: b/src/plm/test/ExoTest.java }; @BeforeClass +@@ -122,7 +122,7 @@ public class ExoTest { + // For compiled languages, we mutate to the compiled entity. + // For script languages, we mutate to the correction entity. + StudentOrCorrection what = StudentOrCorrection.CORRECTION; +- if (lang == Game.JAVA || lang == Game.SCALA || lang == Game.C) ++ if (lang == Game.JAVA || lang == Game.C) + what = StudentOrCorrection.STUDENT; + exo.mutateEntities(WorldKind.CURRENT, what); + +@@ -157,14 +157,7 @@ public class ExoTest { + public void testJavaEntity() { + testCorrectionEntity(Game.JAVA); + } +- +- @Test(timeout=30000) // The compiler sometimes takes time to kick in +- public void testScalaEntity() { +- if (!exo.getProgLanguages().contains(Game.SCALA)) +- fail("Exercise "+exo.getId()+" does not support scala"); +- testCorrectionEntity(Game.SCALA); +- } +- ++ + // @Test(timeout=30000) // The compiler sometimes takes time to kick in + public void testCEntity() { + if (!exo.getProgLanguages().contains(Game.C)) Index: b/src/plm/test/LessonTest.java =================================================================== --- a/src/plm/test/LessonTest.java @@ -1949,3 +1985,676 @@ Index: b/src/plm/test/LessonTest.java }; private String lessonName; +@@ -82,13 +82,7 @@ public class LessonTest { + Lesson lesson = loadLesson(Game.JAVA); + assertTrue("An error arose while loading lesson "+lesson.getName()+"...", lesson.getLoadingOutcomeState() == LoadingOutcome.SUCCESS); + } +- +- @Test +- public void testScalaLesson() throws InstantiationException, IllegalAccessException, ClassNotFoundException { +- Lesson lesson = loadLesson(Game.SCALA); +- assertTrue("An error arose while loading lesson "+lesson.getName()+"...", lesson.getLoadingOutcomeState() == LoadingOutcome.SUCCESS); +- } +- ++ + @Test + public void testPythonLesson() throws InstantiationException, IllegalAccessException, ClassNotFoundException { + Lesson lesson = loadLesson(Game.PYTHON); +Index: b/src/plm/core/lang/LangScala.java +=================================================================== +--- a/src/plm/core/lang/LangScala.java ++++ /dev/null +@@ -1,247 +0,0 @@ +-package plm.core.lang; +- +-import java.util.HashMap; +-import java.util.LinkedList; +-import java.util.List; +-import java.util.Map; +-import java.util.Vector; +- +-import plm.core.PLMCompilerException; +-import plm.core.model.Game; +-import plm.core.model.LogWriter; +-import plm.core.model.lesson.ExecutionProgress; +-import plm.core.model.lesson.Exercise; +-import plm.core.model.lesson.Exercise.StudentOrCorrection; +-import plm.core.ui.ResourcesCache; +-import plm.universe.Entity; +-import scala.Option; +-import scala.collection.JavaConverters; +-import scala.reflect.internal.util.BatchSourceFile; +-import scala.reflect.internal.util.Position; +-import scala.reflect.internal.util.SourceFile; +-import scala.reflect.io.VirtualDirectory; +-import scala.reflect.io.VirtualFile; +-import scala.tools.nsc.Global; +-import scala.tools.nsc.Global.Run; +-import scala.tools.nsc.Settings; +-import scala.tools.nsc.interpreter.AbstractFileClassLoader; +-import scala.tools.nsc.reporters.AbstractReporter; +- +-public class LangScala extends JVMCompiledLang { +- +- ScalaCompiler compiler = new ScalaCompiler(); +- +- public LangScala() { +- super("Scala","scala",ResourcesCache.getIcon("img/lang_scala.png")); +- } +- +- @Override +- public void compileExo(Exercise exo, LogWriter out, StudentOrCorrection whatToCompile) +- throws PLMCompilerException { +- /* Make sure each run generate a new package to avoid that the loader cache prevent the reloading of the newly generated class */ +- packageNameSuffix++; +- runtimePatterns.put("\\$package", +- "package "+packageName()+";import java.awt.Color;"); +- +- List<plm.core.model.session.SourceFile> sfs = exo.getSourceFilesList(this); +- if (sfs == null || sfs.isEmpty()) { +- String msg = exo.getName()+": No source to compile"; +- System.err.println(msg); +- PLMCompilerException e = new PLMCompilerException(msg, null, null); +- exo.lastResult = ExecutionProgress.newCompilationError(e.getMessage()); +- throw e; +- } +- +- try { +- compiler.reset(); +- for (plm.core.model.session.SourceFile sf : sfs) { +- compiler.compile(className(sf.getName()), sf.getCompilableContent(runtimePatterns,whatToCompile), sf.getOffset()); +- } +- } catch (PLMCompilerException e) { +- System.err.println(Game.i18n.tr("Compilation error:")); +- System.err.println(e.getMessage()); +- exo.lastResult = ExecutionProgress.newCompilationError(e.getMessage()); +- +- throw e; +- } +- +- } +- +- /** Converts {@code "foo.bar.baz"} to {@code "foo.bar.Scalabaz"}. */ +- @Override +- public String nameOfCorrectionEntity(Exercise exo){ +- String path = super.nameOfCorrectionEntity(exo); +- +- String[] components = path.split("\\."); +- StringBuilder result = new StringBuilder(); +- int last = components.length - 1; +- for (int i = 0; i < last; i++) { +- result.append(components[i] + "."); +- } +- result.append("Scala" + components[last]); +- return result.toString(); +- } +- +- @Override +- protected Entity mutateEntity(String newClassName) +- throws InstantiationException, IllegalAccessException, +- ClassNotFoundException { +- return (Entity) compiler.findClass(className(newClassName)).newInstance(); +- } +-} +- +-/** In memory compiler of scala code. +- * This is highly inspired of https://github.com/twitter/util/blob/master/util-eval/src/main/scala/com/twitter/util/Eval.scala */ +-class ScalaCompiler { +- +- private PLMReporter reporter; +- private Settings settings; +- private Map<String, Class<?>> cache = new HashMap<String, Class<?>>(); +- private Global global; +- private VirtualDirectory target; +- private ClassLoader classLoader = new AbstractFileClassLoader(target, this.getClass().getClassLoader()); +- +- public ScalaCompiler() { +- super(); +- settings = new Settings(); +- settings.nowarnings().tryToSetFromPropertyValue("true"); // warnings seem to be exceptions, and we don't want them to mess with us +- +- Option<VirtualDirectory> noAncestor = scala.Option$.MODULE$.apply(null); +- target = new VirtualDirectory("(memory)", noAncestor); +- settings.outputDirs().setSingleOutput(target); +- +- settings.usejavacp().tryToSetFromPropertyValue("true"); +- //settings.usemanifestcp().tryToSetFromPropertyValue("true"); +- reporter = new PLMReporter(settings); +- global = new Global(settings,reporter); +- } +- +- public void reset() { +- reporter.reset(); +- reporter.setOffset(0); +- target.clear(); +- cache = new HashMap<String, Class<?>>(); +- classLoader = new AbstractFileClassLoader(target, this.getClass().getClassLoader()); +- } +- +- public void compile(String name,String content,int offset) throws PLMCompilerException { +- if (Game.getInstance().isDebugEnabled()) +- System.out.println("Compiline souce "+name+" to scala (offset:"+offset+"):\n"+content); +- +- Run compiler = global.new Run(); +- List<SourceFile> sources = new LinkedList<SourceFile>(); +- +- sources.add(new BatchSourceFile(new VirtualFile(name) , content.toCharArray())); +- reporter.setOffset(offset); +- +- compiler.compileSources(JavaConverters.asScalaBufferConverter(sources).asScala().toList()); +- +- if (Game.getInstance().isDebugEnabled() && reporter.hasErrors()) +- System.out.println("Here is the scala source code of "+name+" (offset:"+offset+"): "+content); +- reporter.throwExceptionOnNeed(); +- } +- public Class<?> findClass(String className) { +- synchronized (this) { +- if (!cache.containsKey(className)) { +- Class<?> res; +- try { +- res = classLoader.loadClass(className); +- } catch (ClassNotFoundException e) { +- res = null; +- } +- cache.put(className, res); +- } +- +- return cache.get(className); +- } +- } +- +- class PLMReporter extends AbstractReporter { +- final static int INFO = 0; +- final static int WARNING = 1; +- final static int ERROR = 2; +- int offset=0; +- Vector<String> messages = new Vector<String>(); +- Settings settings; +- +- public PLMReporter(Settings s) { +- settings = s; +- } +- public void setOffset(int _offset) { +- this.offset = _offset; +- } +- @Override +- public Settings settings() { +- return settings; +- } +- @Override +- public void displayPrompt() { +- /* Don't do that, pal. */ +- } +- @Override +- public void display(Position pos, String message, Severity _severity) { +- String severityName = _severity.toString(); +- String label = ""; +- int severity = -1; +- if (severityName.equals("INFO") || severityName.equals("scala.tools.nsc.reporters.Reporter$Severity@0")) +- severity = INFO; +- if (severityName.equals("WARNING") || severityName.equals("scala.tools.nsc.reporters.Reporter$Severity@1")) { +- severity = WARNING; +- label= "warning: "; +- } +- if (severityName.equals("ERROR") || severityName.equals("scala.tools.nsc.reporters.Reporter$Severity@2")) { +- severity = ERROR; +- label = "error: "; +- } +- if (severity == -1) +- throw new RuntimeException("Got an unknown severity: "+severityName+". Please adapt the PLM to this new version of scala (or whatever)."); +- if (severity == INFO && !Game.getInstance().isDebugEnabled()) +- return; +- +- int lineNum = -1; +- try { +- lineNum = pos.line() - offset; +- } catch (Throwable t) { +- // That's fine if the line number is not defined. +- } +- +- String name = pos.source().path(); +- int lastDot = name.lastIndexOf('.'); +- if (lastDot != -1) +- name = name.substring(lastDot+1); +- String msg = name+(lineNum == -1? "": ":"+lineNum) +": "+label+message; +- +- // Append the line content and a position marker, if possible +- if (pos != null && pos.isDefined()) { +- msg += "\n"+pos.inUltimateSource(pos.source()).lineContent()+"\n"; +- for (int i=0;i<pos.column()-1;i++) +- msg += " "; +- msg += "^"; +- } +- +- messages.add(msg); +- } +- public void throwExceptionOnNeed() throws PLMCompilerException { +- if (hasErrors()) { +- StringBuffer sb = new StringBuffer(); +- for (String s : messages) +- sb.append(s); +- throw new PLMCompilerException(sb.toString(), null, null); +- } +- } +- @Override +- public void reset() { +- super.reset(); +- messages.removeAllElements(); +- } +- +- /* These methods are mandated by scala 2.11, but I dunno what to do with it, so ignore that for now */ +- public int count(Object o) { +- return 0; +- } +- public void resetCount(Object o) {} +- public void info0(Position arg0, String arg1, Object arg2, boolean arg3) { +- // TODO Auto-generated method stub +- } +- } +-} +\ No newline at end of file +Index: b/src/plm/core/model/Game.java +=================================================================== +--- a/src/plm/core/model/Game.java ++++ b/src/plm/core/model/Game.java +@@ -43,7 +43,6 @@ import plm.core.lang.LangJava; + import plm.core.lang.LangLightbot; + import plm.core.lang.LangPython; + import plm.core.lang.LangRuby; +-import plm.core.lang.LangScala; + import plm.core.lang.ProgrammingLanguage; + import plm.core.model.lesson.Exercise; + import plm.core.model.lesson.Exercise.WorldKind; +@@ -99,14 +98,13 @@ public class Game implements IWorldView + + public static final ProgrammingLanguage JAVA = new LangJava(); + public static final ProgrammingLanguage PYTHON = new LangPython(); +- public static final ProgrammingLanguage SCALA = new LangScala(); + public static final ProgrammingLanguage C = new LangC(); + //public static final ProgrammingLanguage JAVASCRIPT = new ProgrammingLanguage("JavaScript","js",ResourcesCache.getIcon("img/lang_javascript.png")); + public static final ProgrammingLanguage RUBY = new LangRuby(); + public static final ProgrammingLanguage LIGHTBOT = new LangLightbot(); + + public static final ProgrammingLanguage[] programmingLanguages = new ProgrammingLanguage[] { +- JAVA, PYTHON, SCALA, RUBY, LIGHTBOT, C // TODO: re-add JAVASCRIPT to this list once it works at least a bit ++ JAVA, PYTHON, RUBY, LIGHTBOT, C // TODO: re-add JAVASCRIPT to this list once it works at least a bit + }; + private ProgrammingLanguage programmingLanguage = JAVA; + +@@ -164,10 +162,6 @@ public class Game implements IWorldView + i18n = I18nFactory.getI18n(getClass(),"org.plm.i18n.Messages",FileUtils.getLocale(), I18nFactory.FALLBACK); + loadProperties(); + +- if (checkScala()) +- System.err.println(i18n.tr("Scala is usable on your machine. Congratulations.")); +- else +- System.err.println(i18n.tr("Please install Scala version 2.10 or higher to use it in the PLM.")); + if (checkPython()) + System.err.println(i18n.tr("Jython is usable on your machine. Congratulations.")); + else +@@ -180,17 +174,13 @@ public class Game implements IWorldView + String defaultProgrammingLanguage = Game.getProperty(PROP_PROGRAMING_LANGUAGE,Game.JAVA.getLang(),true); + if (!defaultProgrammingLanguage.equalsIgnoreCase(Game.JAVA.getLang()) && + !defaultProgrammingLanguage.equalsIgnoreCase(Game.PYTHON.getLang()) && +- !defaultProgrammingLanguage.equalsIgnoreCase(Game.SCALA.getLang()) && + !defaultProgrammingLanguage.equalsIgnoreCase(Game.C.getLang())) + System.err.println(i18n.tr("Warning, the default programming language is neither ''Java'' nor ''python'' or ''Scala'' or ''C'' but {0}.\n"+ + " This language will be used to setup the worlds, possibly leading to severe issues for the exercises that don''t expect it.\n" + + " It is safer to change the current language, and restart the PLM before proceeding.\n"+ + " Alternatively, the property {1} can be changed in your configuration file ({2}/plm.properties)",defaultProgrammingLanguage,PROP_PROGRAMING_LANGUAGE, getSavingLocation())); + +- if (defaultProgrammingLanguage.equalsIgnoreCase(Game.SCALA.getLang()) && !canScala) { +- System.err.println(i18n.tr("The default programming language is Scala, but your scala installation is not usable. Switching to Java instead.\n")); +- setProgramingLanguage(JAVA); +- } else if (defaultProgrammingLanguage.equalsIgnoreCase(Game.PYTHON.getLang()) && !canPython) { ++ if (defaultProgrammingLanguage.equalsIgnoreCase(Game.PYTHON.getLang()) && !canPython) { + System.err.println(i18n.tr("The default programming language is python, but your python installation is not usable. Switching to Java instead.\n")); + setProgramingLanguage(JAVA); + } else if (defaultProgrammingLanguage.equalsIgnoreCase(Game.C.getLang()) && !canC) { +@@ -231,35 +221,7 @@ public class Game implements IWorldView + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private boolean checkScala() { +- String[] resources = new String[] {"/scala/tools/nsc/Interpreter", "/scala/ScalaObject", "/scala/reflect/io/AbstractFile"}; +- String[] hints = new String[] {"scala-compiler.jar", "scala-library.jar", "scala-reflect.jar"}; +- for (int i=0;i<resources.length;i++) { +- scalaError = canResolve(resources[i],hints[i]); +- if (!scalaError.isEmpty()) { +- System.err.println(scalaError); +- return canScala; +- } +- } +- +- String version = null; +- try { +- Class props = Class.forName("scala.util.Properties"); +- Method meth = props.getMethod("versionString", new Class[] {}); +- version = (String) meth.invoke(props); +- } catch (Exception e) { +- scalaError = i18n.tr("Error {0} while retrieving the Scala version: {1}", e.getClass().getName() ,e.getLocalizedMessage()); +- System.err.println( scalaError ); +- return canScala; +- } +- +- if (version.contains("version 2.10") || version.contains("version 2.11")) { +- canScala = true; +- return canScala; +- } else { +- scalaError = i18n.tr("Scala is too ancient. Found {0} while I need 2.10 or higher.",version); +- System.err.println(scalaError); +- return canScala; +- } ++ return false; + } + + public boolean canPython = false; +@@ -972,11 +934,6 @@ public class Game implements IWorldView + + if (isValidProgLanguage(newLanguage)) { + //System.out.println("Switch programming language to "+newLanguage); +- if (newLanguage.equals(Game.SCALA) && !canScala) { +- JOptionPane.showMessageDialog(null, i18n.tr("Please install Scala version 2.10 or higher to use it in the PLM.\n\n")+scalaError , +- i18n.tr("Scala is missing"), JOptionPane.ERROR_MESSAGE); +- return; +- } + if (newLanguage.equals(Game.PYTHON) && !canPython) { + JOptionPane.showMessageDialog(null, i18n.tr("Please install jython and its dependencies to use the python programming language in the PLM.\n\n")+pythonError, + i18n.tr("Python is missing"), JOptionPane.ERROR_MESSAGE); +@@ -999,7 +956,7 @@ public class Game implements IWorldView + } + this.programmingLanguage = newLanguage; + fireProgLangChange(newLanguage); +- if (newLanguage.equals(Game.JAVA) || newLanguage.equals(Game.PYTHON) || newLanguage.equals(Game.SCALA) || newLanguage.equals(Game.C)) // Only save it if it's stable enough ++ if (newLanguage.equals(Game.JAVA) || newLanguage.equals(Game.PYTHON) || newLanguage.equals(Game.C)) // Only save it if it's stable enough + setProperty(PROP_PROGRAMING_LANGUAGE, newLanguage.getLang()); + return; + } +Index: b/src/plm/core/model/lesson/ExerciseTemplated.java +=================================================================== +--- a/src/plm/core/model/lesson/ExerciseTemplated.java ++++ b/src/plm/core/model/lesson/ExerciseTemplated.java +@@ -212,7 +212,7 @@ public abstract class ExerciseTemplated + String initialContent = templateHead.toString() + templateTail.toString(); + String skelContent; + String headContent; +- if (lang == Game.PYTHON || lang == Game.SCALA || lang == Game.C) { ++ if (lang == Game.PYTHON || lang == Game.C) { + skelContent = skel.toString(); + headContent = head.toString(); + } else { +@@ -358,7 +358,7 @@ public abstract class ExerciseTemplated + System.out.println("Found suitable templating entity "+lang.nameOfCorrectionEntity(this)+" in "+lang); + + } catch (NoSuchEntityException e) { +- if (lang.equals(Game.PYTHON) || lang.equals(Game.SCALA) || lang.equals(Game.JAVA)) ++ if (lang.equals(Game.PYTHON) || lang.equals(Game.JAVA)) + System.out.println("No templating entity found: "+e); + + if (getProgLanguages().contains(lang)) +Index: b/src/plm/universe/bat/BatTest.java +=================================================================== +--- a/src/plm/universe/bat/BatTest.java ++++ b/src/plm/universe/bat/BatTest.java +@@ -165,9 +165,7 @@ public class BatTest { + } + private void displayParameter(Object o, StringBuffer sb, ProgrammingLanguage pl) { + if (o == null) { +- if (pl == Game.SCALA) +- sb.append("Nil"); +- else if (pl == Game.PYTHON) ++ if (pl == Game.PYTHON) + sb.append("None"); + else + sb.append("null"); +@@ -175,8 +173,6 @@ public class BatTest { + } else if (o instanceof String[]) { + if (pl.equals(Game.JAVA)) { + sb.append("{"); +- } else if (pl.equals(Game.SCALA)) { +- sb.append("Array("); + } else if (pl.equals(Game.PYTHON)) { + sb.append("["); + } else { +@@ -191,8 +187,6 @@ public class BatTest { + sb.deleteCharAt(sb.length()-1); + if (pl.equals(Game.JAVA)) { + sb.append("}"); +- } else if (pl.equals(Game.SCALA)) { +- sb.append(")"); + } else if (pl.equals(Game.PYTHON)) { + sb.append("]"); + } else { +@@ -204,8 +198,6 @@ public class BatTest { + + if (pl.equals(Game.JAVA)) { + sb.append("{"); +- } else if (pl.equals(Game.SCALA)) { +- sb.append("Array("); + } else if (pl.equals(Game.PYTHON)) { // Python + sb.append("["); + } else { +@@ -231,8 +223,6 @@ public class BatTest { + } + if (pl.equals(Game.JAVA)) { + sb.append("}"); +- } else if (pl.equals(Game.SCALA)) { +- sb.append(")"); + } else if (pl.equals(Game.PYTHON)) { + sb.append("]"); + } else { +@@ -240,7 +230,7 @@ public class BatTest { + } + } else if (o instanceof Boolean) { + Boolean b = (Boolean) o; +- if (pl.equals(Game.JAVA) || pl.equals(Game.SCALA)) { ++ if (pl.equals(Game.JAVA)) { + sb.append(b ? "true":"false"); + } else if (pl.equals(Game.PYTHON)) { + sb.append(b ? "True" : "False"); +@@ -296,8 +286,6 @@ public class BatTest { + displayParameter(o, sb, Game.getProgrammingLanguage()); + return sb.toString(); + } else { +- if (Game.getProgrammingLanguage() == Game.SCALA) +- return "Nil"; + if (Game.getProgrammingLanguage() == Game.PYTHON) + return "None"; + return "null"; +Index: b/src/plm/test/simple/test/ScalaSimpleExerciseTest.java +=================================================================== +--- a/src/plm/test/simple/test/ScalaSimpleExerciseTest.java ++++ /dev/null +@@ -1,52 +0,0 @@ +-package plm.test.simple.test; +- +-import plm.core.model.Game; +- +-public class ScalaSimpleExerciseTest extends JVMCompiledSimpleExerciseTest { +- +- public ScalaSimpleExerciseTest() { +- super(Game.SCALA); +- } +- +- @Override +- public String generateSyntaxErrorCode() { +- return "zqkdçajdé\"\""; +- } +- +- @Override +- public String generateVariableErrorCode() { +- return "toto += 1;\n"; +- } +- +- @Override +- public String generateNullPointerErrorCode() { +- return "override def run() {\n" +- + " var s:String = null;\n" +- + " println(s.length());\n" +- + "}"; +- } +- +- @Override +- public String generateOutOfBoundsErrorCode() { +- return "override def run() {\n" +- + " var t:Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);\n" +- + " println(t(42));\n" +- + "}"; +- } +- +- @Override +- public String generateWrongCode() { +- return "override def run() {\n" +- + " world.asInstanceOf[SimpleWorld].setObjectif(false);\n" +- + "}"; +- } +- +- @Override +- public String generateSolutionFollowedByError() { +- return "override def run() {\n" +- + " world.asInstanceOf[SimpleWorld].setObjectif(true);\n" +- + " var t:Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);\n" +- + " println(t(42));\n" +- + "}"; +- } +-} +Index: b/src/plm/core/lang/JVMCompiledLang.java +=================================================================== +--- a/src/plm/core/lang/JVMCompiledLang.java ++++ b/src/plm/core/lang/JVMCompiledLang.java +@@ -48,15 +48,6 @@ public abstract class JVMCompiledLang ex + ent = (Entity)getClass().getClassLoader().loadClass(newClassName).newInstance(); + } catch (Exception e2) { + if (whatToMutate == StudentOrCorrection.STUDENT) { +- if (Game.getProgrammingLanguage() == Game.SCALA) +- throw new PLMCompilerException(Game.i18n.tr( +- "Your entity failed to start. Did you forgot to put your code within a method?\n\n" +- + "This problem often arises when the exercise expects you to put all the code within a \n" +- + "method e.g. run(), but you put some statements (e.g. forward()) outside of any method.\n\n" +- + "The easiest solution to sort it out is to copy all your code (Ctrl-A Ctrl-C), use the \n" +- + "'Exercise/Revert' menu to reset the template, and paste (Ctrl-V) your code within the\n" +- + "provided method.")); +- else + throw new PLMCompilerException(Game.i18n.tr("Your entity failed to start. Your constructor seems to be broken, but I have no clue.")); + } else { + throw new PLMEntityNotFound("Cannot find an entity of name "+className(newClassName)+" or "+newClassName+". Broken lesson.", e2); +Index: b/src/plm/core/model/lesson/ExerciseTemplatingEntity.java +=================================================================== +--- a/src/plm/core/model/lesson/ExerciseTemplatingEntity.java ++++ b/src/plm/core/model/lesson/ExerciseTemplatingEntity.java +@@ -83,19 +83,7 @@ public abstract class ExerciseTemplating + javaFile.setCorrection("$package "+template+" @SuppressWarnings(\"unchecked\") public void run(BatTest t) {\n"+javaFile.getTemplate()+"}\n"+javaFile.getCorrection()+" }"); + javaFile.setTemplate ("$package "+template+" @SuppressWarnings(\"unchecked\") public void run(BatTest t) { "+javaFile.getTemplate()+"} $body }"); + //System.out.println("New template: "+sf.getTemplate()); +- +- if (getProgLanguages().contains(Game.SCALA)) { +- SourceFile scalaFile = sourceFiles.get(Game.SCALA).get(0); +- String header = "$package\n" +- + "import plm.universe.bat.{BatEntity,BatWorld,BatTest}; \n" +- + "import plm.universe.World; \n" +- + "import scala.collection.JavaConverters._;\n" +- + "class "+entName+" extends BatEntity { "; +- +- scalaFile.setCorrection(header+scalaFile.getCorrection()+" }"); +- scalaFile.setTemplate (header+scalaFile.getTemplate() +" }"); +- } +- ++ + computeAnswer(); + setSetup(true); + } +@@ -114,8 +102,6 @@ public abstract class ExerciseTemplating + protected void templateScala(String entName, String[] types, String initialCode, String correction) { + if (isSetup()) + throw new RuntimeException("The exercise "+getName()+" is already setup, too late to add a programming language template."); +- if (this.getProgLanguages().contains(Game.SCALA)) +- throw new RuntimeException("The exercise "+getName()+" has two Scala templates. Please fix this bug."); + + StringBuffer skeleton = new StringBuffer(" val res = "); + skeleton.append(entName); +@@ -146,9 +132,6 @@ public abstract class ExerciseTemplating + skeleton.append(" case e:java.lang.ClassCastException => t.setResult(res)\n"); // primitive types cannot be converted to java, but I don't care (and cannot test whether res is a primitive type) + skeleton.append("}\n"); + +- newSource(Game.SCALA, entName, initialCode, "\n override def run(t: BatTest) {\n"+skeleton+"\n }\n$body",14, +- "\n override def run(t: BatTest) {\n"+skeleton+"\n }\n"+initialCode+correction); +- addProgLanguage(Game.SCALA); + } + public boolean isSetup() { + return isSetup; +Index: b/src/plm/core/ui/editor/MissionEditor.java +=================================================================== +--- a/src/plm/core/ui/editor/MissionEditor.java ++++ b/src/plm/core/ui/editor/MissionEditor.java +@@ -110,7 +110,6 @@ public class MissionEditor extends JFram + selectorAll.setSelected(true); + final JCheckBox selectorC = new JCheckBox("C"); + final JCheckBox selectorJava = new JCheckBox("Java"); +- final JCheckBox selectorScala = new JCheckBox("Scala"); + final JCheckBox selectorPython = new JCheckBox("Python"); + + final ItemListener il = new ItemListener() { +@@ -129,9 +128,6 @@ public class MissionEditor extends JFram + if(selectorJava.isSelected()){ + l.add(Game.JAVA); + } +- if(selectorScala.isSelected()){ +- l.add(Game.SCALA); +- } + if(selectorPython.isSelected()){ + l.add(Game.PYTHON); + } +@@ -162,7 +158,6 @@ public class MissionEditor extends JFram + selectorAll.addItemListener(il); + selectorC.addItemListener(il); + selectorJava.addItemListener(il); +- selectorScala.addItemListener(il); + selectorPython.addItemListener(il); + + editor = new JEditorPane(); +@@ -183,7 +178,6 @@ public class MissionEditor extends JFram + box.add(selectorAll); + box.add(selectorC); + box.add(selectorJava); +- box.add(selectorScala); + box.add(selectorPython); + + rightDisplay.add(box, BorderLayout.NORTH); +Index: b/src/plm/core/ui/JavaEditorPanel.java +=================================================================== +--- a/src/plm/core/ui/JavaEditorPanel.java ++++ b/src/plm/core/ui/JavaEditorPanel.java +@@ -31,8 +31,6 @@ public class JavaEditorPanel extends RTe + codeEditor.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); + } else if (lang.equals(Game.PYTHON)) { + codeEditor.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_PYTHON); +- } else if (lang.equals(Game.SCALA)) { +- codeEditor.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_SCALA); + } else if (lang.equals(Game.C)) { + codeEditor.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_C); + } else { +Index: b/src/plm/universe/bat/BatExercise.java +=================================================================== +--- a/src/plm/universe/bat/BatExercise.java ++++ b/src/plm/universe/bat/BatExercise.java +@@ -98,7 +98,7 @@ public abstract class BatExercise extend + } + + for (ProgrammingLanguage pl : getProgLanguages()) { +- if (!pl.equals(Game.JAVA) && !pl.equals(Game.SCALA)) ++ if (!pl.equals(Game.JAVA)) + worlds.get(0).getEntity(0).setScript(pl, corrections.get(pl)); + } + +Index: b/src/plm/test/simple/test/AllSimpleExerciseTests.java +=================================================================== +--- a/src/plm/test/simple/test/AllSimpleExerciseTests.java ++++ b/src/plm/test/simple/test/AllSimpleExerciseTests.java +@@ -5,7 +5,7 @@ import org.junit.runners.Suite; + import org.junit.runners.Suite.SuiteClasses; + + @RunWith(Suite.class) +-@SuiteClasses({ JavaSimpleExerciseTest.class, ScalaSimpleExerciseTest.class, PythonSimpleExerciseTest.class }) ++@SuiteClasses({ JavaSimpleExerciseTest.class, PythonSimpleExerciseTest.class }) + public class AllSimpleExerciseTests { + + } diff --git a/debian/patches/series b/debian/patches/series index 91eca40..96ea746 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1,3 @@ system-ant-tasks no-scala +no-github -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/plm.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

