Commit e24caf8d authored by Andrey Filippov's avatar Andrey Filippov

ADding access to the current tool from the generators, debugging

parent c3b3f877
...@@ -153,6 +153,8 @@ public class VDTLaunchConfigurationDelegate implements ILaunchConfigurationDeleg ...@@ -153,6 +153,8 @@ public class VDTLaunchConfigurationDelegate implements ILaunchConfigurationDeleg
, IProgressMonitor monitor , IProgressMonitor monitor
) throws CoreException ) throws CoreException
{ {
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_THREAD_CONFICT))
System.out.println("-=-=-=- launch: "+VDTLaunchUtil.getToolName(configuration)+" threadID="+Thread.currentThread().getId());
try { try {
doLaunch(configuration, mode, launch, monitor); doLaunch(configuration, mode, launch, monitor);
} catch(Exception e) { } catch(Exception e) {
......
...@@ -436,8 +436,10 @@ public abstract class Context { ...@@ -436,8 +436,10 @@ public abstract class Context {
protected List<String> buildCommandString(String paramStringTemplate, FormatProcessor topProcessor) protected List<String> buildCommandString(String paramStringTemplate, FormatProcessor topProcessor)
throws ToolException throws ToolException
{ {
if (topProcessor==null) topProcessor=new FormatProcessor(this); // or use "context"
else topProcessor.setCurrentTool(this); // or use "context"
FormatProcessor processor = new FormatProcessor(new Recognizer[] { FormatProcessor processor = new FormatProcessor(new Recognizer[] {
new SimpleGeneratorRecognizer(), new SimpleGeneratorRecognizer(topProcessor),
new RepeaterRecognizer() new RepeaterRecognizer()
// new ContextParamRecognizer(this), // new ContextParamRecognizer(this),
// new ContextParamRepeaterRecognizer(this) // new ContextParamRepeaterRecognizer(this)
...@@ -451,12 +453,16 @@ public abstract class Context { ...@@ -451,12 +453,16 @@ public abstract class Context {
throws ToolException throws ToolException
{ {
if (stringTemplate==null) return null; if (stringTemplate==null) return null;
if (topProcessor==null) topProcessor=new FormatProcessor(this); // or use "context"
else topProcessor.setCurrentTool(this); // or use "context"
Parameter parName=findParam(stringTemplate); Parameter parName=findParam(stringTemplate);
if (parName!=null){ if (parName!=null){
return parName.getValue(topProcessor).get(0).trim(); // get parameter return parName.getValue(topProcessor).get(0).trim(); // get parameter
} }
FormatProcessor processor = new FormatProcessor(new Recognizer[] { FormatProcessor processor = new FormatProcessor(new Recognizer[] {
new SimpleGeneratorRecognizer(), new SimpleGeneratorRecognizer(topProcessor),
new RepeaterRecognizer() new RepeaterRecognizer()
// new ContextParamRecognizer(this), // new ContextParamRecognizer(this),
// new ContextParamRepeaterRecognizer(this) // new ContextParamRepeaterRecognizer(this)
......
...@@ -34,7 +34,7 @@ public abstract class AbstractGenerator { ...@@ -34,7 +34,7 @@ public abstract class AbstractGenerator {
protected String separator; protected String separator;
private final boolean forcedMultiline; private final boolean forcedMultiline;
private boolean menuMode=false; // managing menu items, not running tool. Ignore Generator errors private boolean menuMode=false; // managing menu items, not running tool. Ignore Generator errors
protected Tool tool0; // "tool" was already used in ToolParamRecognizer / Andrey // protected Tool tool0; // "tool" was already used in ToolParamRecognizer / Andrey
protected FormatProcessor topProcessor; // to protect from cycles in recursion, replacing static in FormatProcessor / Andrey protected FormatProcessor topProcessor; // to protect from cycles in recursion, replacing static in FormatProcessor / Andrey
public AbstractGenerator(FormatProcessor processor) { public AbstractGenerator(FormatProcessor processor) {
...@@ -69,14 +69,23 @@ public abstract class AbstractGenerator { ...@@ -69,14 +69,23 @@ public abstract class AbstractGenerator {
} }
topProcessor=processor; topProcessor=processor;
} }
public void setTopProcessor(FormatProcessor processor){
topProcessor=processor;
}
public void setMenuMode(boolean menuMode){ public void setMenuMode(boolean menuMode){
this.menuMode=menuMode; this.menuMode=menuMode;
} }
public boolean getMenuMode(){ public boolean getMenuMode(){
return menuMode; return menuMode;
} }
public void setTool(Tool tool){ // public void setTool(Tool tool){
this.tool0=tool; // this.tool0=tool;
// }
public Tool getCurrentTool(){
if (topProcessor==null) return null;
return topProcessor.getCurrentTool();
} }
protected FormatProcessor getTopProcessor(){return topProcessor;} protected FormatProcessor getTopProcessor(){return topProcessor;}
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
package com.elphel.vdt.core.tools.generators; package com.elphel.vdt.core.tools.generators;
import com.elphel.vdt.VDT; import com.elphel.vdt.VDT;
import com.elphel.vdt.core.tools.params.FormatProcessor;
import com.elphel.vdt.ui.variables.SelectedResourceManager; import com.elphel.vdt.ui.variables.SelectedResourceManager;
public class BuildStampGenerator extends AbstractGenerator { public class BuildStampGenerator extends AbstractGenerator {
...@@ -26,16 +27,16 @@ public class BuildStampGenerator extends AbstractGenerator { ...@@ -26,16 +27,16 @@ public class BuildStampGenerator extends AbstractGenerator {
return NAME; return NAME;
} }
public BuildStampGenerator() public BuildStampGenerator(FormatProcessor topProcessor)
{ {
super(null); // null for topFormatProcessor - this generator can not reference other parameters super(topProcessor); // null for topFormatProcessor - this generator can not reference other parameters
} }
protected String[] getStringValues() { protected String[] getStringValues() {
// if ( return new String[] {(tool0!=null)?tool0.getStateFile(): ""}; // if ( return new String[] {(tool0!=null)?tool0.getStateFile(): ""};
// System.out.println("#### BuildStampGenerator(): tool0="+ // System.out.println("#### BuildStampGenerator(): tool0="+
//((tool0!=null)?(tool0.getName()+" state="+tool0.getState()+" mode="+tool0.getMode()):"null")); //((tool0!=null)?(tool0.getName()+" state="+tool0.getState()+" mode="+tool0.getMode()):"null"));
String stamp=(tool0!=null)?tool0.getTimeStamp(): null; String stamp=(getCurrentTool()!=null)?getCurrentTool().getTimeStamp(): null;
if (stamp==null) stamp=SelectedResourceManager.getDefault().getBuildStamp(); if (stamp==null) stamp=SelectedResourceManager.getDefault().getBuildStamp();
return new String[] {stamp}; return new String[] {stamp};
} }
......
...@@ -31,8 +31,12 @@ import org.eclipse.core.resources.IResource; ...@@ -31,8 +31,12 @@ import org.eclipse.core.resources.IResource;
//import com.elphel.vdt.VDT; //import com.elphel.vdt.VDT;
import com.elphel.vdt.VerilogUtils; import com.elphel.vdt.VerilogUtils;
import com.elphel.vdt.core.tools.params.FormatProcessor;
import com.elphel.vdt.core.tools.params.Tool;
import com.elphel.vdt.ui.MessageUI; import com.elphel.vdt.ui.MessageUI;
//import com.elphel.vdt.core.verilog.VerilogUtils; //import com.elphel.vdt.core.verilog.VerilogUtils;
import com.elphel.vdt.ui.variables.SelectedResourceManager; import com.elphel.vdt.ui.variables.SelectedResourceManager;
...@@ -52,9 +56,10 @@ public class FilteredSourceListGenerator extends AbstractGenerator { ...@@ -52,9 +56,10 @@ public class FilteredSourceListGenerator extends AbstractGenerator {
public FilteredSourceListGenerator(String prefix, public FilteredSourceListGenerator(String prefix,
String suffix, String suffix,
String separator) String separator,
FormatProcessor topProcessor)
{ {
super(prefix, suffix, separator, null ); // null for topFormatProcessor - this generator can not reference other parameters super(prefix, suffix, separator, topProcessor );
} }
public String getName() { public String getName() {
...@@ -62,9 +67,25 @@ public class FilteredSourceListGenerator extends AbstractGenerator { ...@@ -62,9 +67,25 @@ public class FilteredSourceListGenerator extends AbstractGenerator {
} }
protected String[] getStringValues() { protected String[] getStringValues() {
String ignoreFilter= SelectedResourceManager.getDefault().getFilter(); // old version
// System.out.println("FilteredSourceListGenerator(), tool0="+((tool0==null)?null:(tool0.getName()+tool0.getIgnoreFilter())));
// System.out.print("FilteredSourceListGenerator(): ");
if (topProcessor!=null){
Tool tool=topProcessor.getCurrentTool();
// System.out.println(", tool="+tool+" tool name="+((tool!=null)?tool.getName():null));
if (tool != null) {
ignoreFilter=tool.getIgnoreFilter();
// System.out.println(" tool="+tool.getName()+", ignoreFilter="+ignoreFilter);
} else {
System.out.println("FilteredSourceListGenerator(): topProcessor.getCurrentTool() is null");
}
} else {
System.out.println("FilteredSourceListGenerator(): topProcessor is null");
}
String[] file_names = null; String[] file_names = null;
IResource resource = SelectedResourceManager.getDefault().getChosenVerilogFile(); IResource resource = SelectedResourceManager.getDefault().getChosenVerilogFile();
String ignoreFilter= SelectedResourceManager.getDefault().getFilter();
Pattern ignorePattern = null; Pattern ignorePattern = null;
if (ignoreFilter!=null){ if (ignoreFilter!=null){
try { try {
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
package com.elphel.vdt.core.tools.generators; package com.elphel.vdt.core.tools.generators;
import com.elphel.vdt.VDT; import com.elphel.vdt.VDT;
import com.elphel.vdt.core.tools.params.FormatProcessor;
import com.elphel.vdt.ui.variables.SelectedResourceManager; import com.elphel.vdt.ui.variables.SelectedResourceManager;
...@@ -27,9 +28,9 @@ import com.elphel.vdt.ui.variables.SelectedResourceManager; ...@@ -27,9 +28,9 @@ import com.elphel.vdt.ui.variables.SelectedResourceManager;
*/ */
public class StateBaseGenerator extends AbstractGenerator { public class StateBaseGenerator extends AbstractGenerator {
public static final String NAME = VDT.GENERATOR_ID_STATE_FILE; public static final String NAME = VDT.GENERATOR_ID_STATE_FILE;
public StateBaseGenerator() public StateBaseGenerator(FormatProcessor topProcessor)
{ {
super(null); // null for topFormatProcessor - this generator can not reference other parameters super(topProcessor); // null for topFormatProcessor - this generator can not reference other parameters
} }
public String getName() { public String getName() {
...@@ -37,7 +38,8 @@ public class StateBaseGenerator extends AbstractGenerator { ...@@ -37,7 +38,8 @@ public class StateBaseGenerator extends AbstractGenerator {
} }
protected String[] getStringValues() { protected String[] getStringValues() {
String base=(tool0!=null)?tool0.getStateFile(): ""; // String base=(tool0!=null)?tool0.getStateFile(): "";
String base=(getCurrentTool()!=null)?getCurrentTool().getStateFile(): "";
if (base.lastIndexOf('.')>=0) base=base.substring(0,base.lastIndexOf('.')); if (base.lastIndexOf('.')>=0) base=base.substring(0,base.lastIndexOf('.'));
return new String[] {base}; return new String[] {base};
} }
......
...@@ -18,18 +18,27 @@ ...@@ -18,18 +18,27 @@
package com.elphel.vdt.core.tools.generators; package com.elphel.vdt.core.tools.generators;
import com.elphel.vdt.VDT; import com.elphel.vdt.VDT;
import com.elphel.vdt.core.tools.params.FormatProcessor;
import com.elphel.vdt.ui.MessageUI;
public class StateDirGenerator extends AbstractGenerator { public class StateDirGenerator extends AbstractGenerator {
public static final String NAME = VDT.GENERATOR_ID_STATE_DIR; public static final String NAME = VDT.GENERATOR_ID_STATE_DIR;
public StateDirGenerator() public StateDirGenerator(FormatProcessor topProcessor)
{ {
super(null); // null for topFormatProcessor - this generator can not reference other parameters super(topProcessor); // null for topFormatProcessor - this generator can not reference other parameters
} }
public String getName() { public String getName() {
return NAME; return NAME;
} }
protected String[] getStringValues() { protected String[] getStringValues() {
return new String[] {(tool0!=null)?tool0.getStateDir(): ""}; // return new String[] {(tool0!=null)?tool0.getStateDir(): ""};
String stateDir=(getCurrentTool()!=null)?getCurrentTool().getStateDir(): "";
if (getCurrentTool()==null){
MessageUI.error("StateDirGenerator(): getCurrentTool()==null");
System.out.println("StateDirGenerator(): getCurrentTool()==null");
}
return new String[] {stateDir};
} }
} }
...@@ -18,13 +18,14 @@ ...@@ -18,13 +18,14 @@
package com.elphel.vdt.core.tools.generators; package com.elphel.vdt.core.tools.generators;
import com.elphel.vdt.VDT; import com.elphel.vdt.VDT;
import com.elphel.vdt.core.tools.params.FormatProcessor;
import com.elphel.vdt.ui.variables.SelectedResourceManager; import com.elphel.vdt.ui.variables.SelectedResourceManager;
public class StateFileGenerator extends AbstractGenerator { public class StateFileGenerator extends AbstractGenerator {
public static final String NAME = VDT.GENERATOR_ID_STATE_FILE; public static final String NAME = VDT.GENERATOR_ID_STATE_FILE;
public StateFileGenerator() public StateFileGenerator(FormatProcessor topProcessor)
{ {
super(null); // null for topFormatProcessor - this generator can not reference other parameters super(topProcessor);
} }
public String getName() { public String getName() {
...@@ -32,6 +33,7 @@ public class StateFileGenerator extends AbstractGenerator { ...@@ -32,6 +33,7 @@ public class StateFileGenerator extends AbstractGenerator {
} }
protected String[] getStringValues() { protected String[] getStringValues() {
return new String[] {(tool0!=null)?tool0.getStateFile(): ""}; // return new String[] {(tool0!=null)?tool0.getStateFile(): ""};
return new String[] {(getCurrentTool()!=null)?getCurrentTool().getStateFile(): ""};
} }
} }
...@@ -51,7 +51,8 @@ public class ValueGenerator extends AbstractGenerator { ...@@ -51,7 +51,8 @@ public class ValueGenerator extends AbstractGenerator {
public String[] generate() { public String[] generate() {
if (!param.getType().isList()) { if (!param.getType().isList()) {
List<String> rslt=param.getValue(topProcessor); // List<String> rslt=param.getValue(topProcessor);
List<String> rslt=new ArrayList<String>(param.getValue(topProcessor));
if (rslt.isEmpty()){ if (rslt.isEmpty()){
System.out.println("BUG in ValueGenerator.java#generate: param.getValue() isEmpty for "+param.getID()); System.out.println("BUG in ValueGenerator.java#generate: param.getValue() isEmpty for "+param.getID());
return new String[]{prefix + "" + suffix}; return new String[]{prefix + "" + suffix};
......
...@@ -20,6 +20,7 @@ package com.elphel.vdt.core.tools.params; ...@@ -20,6 +20,7 @@ package com.elphel.vdt.core.tools.params;
import java.util.*; import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import com.elphel.vdt.core.tools.contexts.Context;
import com.elphel.vdt.core.tools.generators.AbstractGenerator; import com.elphel.vdt.core.tools.generators.AbstractGenerator;
import com.elphel.vdt.core.tools.params.recognizers.Recognizer; import com.elphel.vdt.core.tools.params.recognizers.Recognizer;
import com.elphel.vdt.core.tools.params.recognizers.RecognizerResult; import com.elphel.vdt.core.tools.params.recognizers.RecognizerResult;
...@@ -42,6 +43,7 @@ public class FormatProcessor { ...@@ -42,6 +43,7 @@ public class FormatProcessor {
private String initialTemplate; private String initialTemplate;
private FormatProcessor topProcessor=null; private FormatProcessor topProcessor=null;
private Tool currentTool; //current tool - used for FilteredSourceListGenerator();
// private static int callCount = 0; // private static int callCount = 0;
private int callCount = 0; // only valid for topProcessor private int callCount = 0; // only valid for topProcessor
...@@ -85,6 +87,31 @@ public class FormatProcessor { ...@@ -85,6 +87,31 @@ public class FormatProcessor {
return outputLines; return outputLines;
} }
public FormatProcessor(Context context){
this (null,null);
setCurrentTool(context);
//else if (context instanceof Tool)
}
public Tool getCurrentTool(){
if (!topProcessor.equals(this)){
System.out.println("Warning: trying to get tool not from the topProcessor");
return topProcessor.getCurrentTool();
}
return currentTool;
}
public void setCurrentTool(Context context){
if (context instanceof Tool) {
if (!topProcessor.equals(this)){
System.out.println("Warning: trying to set tool not on the topProcessor");
topProcessor.setCurrentTool(context);
return;
}
currentTool=(Tool) context;
}
}
private List<String> processTemplate(String template) private List<String> processTemplate(String template)
throws ToolException throws ToolException
{ {
......
...@@ -302,12 +302,15 @@ public class Parameter implements Cloneable, Updateable { ...@@ -302,12 +302,15 @@ public class Parameter implements Cloneable, Updateable {
if(type.isList()) if(type.isList())
throw new ToolException("Assigning a non-list value to list parameter"); throw new ToolException("Assigning a non-list value to list parameter");
checkValue(value);
currentValue.clear();
currentValue.add(value);
canonicalizeValue(currentValue); checkValue(value);
// currentValue.clear();
// currentValue.add(value);
// canonicalizeValue(currentValue);
List<String> newValue=new ArrayList<String>();
newValue.add(value);
canonicalizeValue(newValue);
currentValue = newValue;
} }
public void setCurrentValue(List<String> value) throws ToolException { public void setCurrentValue(List<String> value) throws ToolException {
...@@ -318,11 +321,14 @@ public class Parameter implements Cloneable, Updateable { ...@@ -318,11 +321,14 @@ public class Parameter implements Cloneable, Updateable {
if(!type.isList()) if(!type.isList())
throw new ToolException("Assigning a list value to non-list parameter"); throw new ToolException("Assigning a list value to non-list parameter");
checkValue(value); // checkValue(value);
// currentValue = new ArrayList<String>(value);
// canonicalizeValue(currentValue);
currentValue = new ArrayList<String>(value); List<String> copyValue=new ArrayList<String>(value);
checkValue(copyValue);
canonicalizeValue(currentValue); canonicalizeValue(copyValue);
currentValue = copyValue;
} }
public List<String> getCurrentValue() { public List<String> getCurrentValue() {
...@@ -350,13 +356,14 @@ public class Parameter implements Cloneable, Updateable { ...@@ -350,13 +356,14 @@ public class Parameter implements Cloneable, Updateable {
// } // }
List<String> processedDefaultValue = null; List<String> processedDefaultValue = null;
if (topProcessor==null) topProcessor=new FormatProcessor(null,null); if (topProcessor==null) topProcessor=new FormatProcessor(context);
else topProcessor.setCurrentTool(context);
FormatProcessor processor = new FormatProcessor(new Recognizer[] { FormatProcessor processor = new FormatProcessor(new Recognizer[] {
//new RepeaterRecognizer(), //new RepeaterRecognizer(),
new SimpleGeneratorRecognizer(menuMode), new SimpleGeneratorRecognizer(menuMode,topProcessor),
new ContextParamListRecognizer(context, topProcessor), // Andrey: returning list as the source parameter new ContextParamListRecognizer(context, topProcessor), // Andrey: returning list as the source parameter
// new ContextParamRecognizer(context) // new ContextParamRecognizer(context)
new DefaultListGeneratorRecognizer(menuMode) new DefaultListGeneratorRecognizer(menuMode, topProcessor)
}, topProcessor); }, topProcessor);
try { try {
...@@ -529,11 +536,12 @@ public class Parameter implements Cloneable, Updateable { ...@@ -529,11 +536,12 @@ public class Parameter implements Cloneable, Updateable {
} }
String format = syntax.getFormat(); String format = syntax.getFormat();
if (topProcessor==null) topProcessor=new FormatProcessor(null,null); if (topProcessor==null) topProcessor=new FormatProcessor(context);
else topProcessor.setCurrentTool(context);
FormatProcessor processor = new FormatProcessor(new Recognizer[] { FormatProcessor processor = new FormatProcessor(new Recognizer[] {
new ParamFormatRecognizer(this), new ParamFormatRecognizer(this),
new ParamRepeaterRecognizer(this), new ParamRepeaterRecognizer(this),
new SimpleGeneratorRecognizer(), new SimpleGeneratorRecognizer(topProcessor),
new RepeaterRecognizer(), new RepeaterRecognizer(),
},topProcessor); },topProcessor);
...@@ -634,10 +642,11 @@ public class Parameter implements Cloneable, Updateable { ...@@ -634,10 +642,11 @@ public class Parameter implements Cloneable, Updateable {
// //
private String getOmitValue(FormatProcessor topProcessor) { private String getOmitValue(FormatProcessor topProcessor) {
if (topProcessor==null) topProcessor=new FormatProcessor(null,null); if (topProcessor==null) topProcessor=new FormatProcessor(context);
else topProcessor.setCurrentTool(context);
FormatProcessor processor = new FormatProcessor(new Recognizer[] { FormatProcessor processor = new FormatProcessor(new Recognizer[] {
new ContextParamRecognizer(context, topProcessor), new ContextParamRecognizer(context, topProcessor),
new SimpleGeneratorRecognizer() new SimpleGeneratorRecognizer(topProcessor)
}, false,topProcessor); }, false,topProcessor);
String resolvedOmitValue = ConditionUtils.resolveContextCondition(context, omitValue, topProcessor); String resolvedOmitValue = ConditionUtils.resolveContextCondition(context, omitValue, topProcessor);
...@@ -669,8 +678,16 @@ public class Parameter implements Cloneable, Updateable { ...@@ -669,8 +678,16 @@ public class Parameter implements Cloneable, Updateable {
} }
private void canonicalizeValue(List<String> value) { private void canonicalizeValue(List<String> value) {
for(int i = 0; i < value.size(); i++) int oldSize=value.size();
for(int i = 0; i < value.size(); i++) {
try { // just catching a BUG, normally not needed
value.set(i, type.canonicalizeValue(value.get(i))); value.set(i, type.canonicalizeValue(value.get(i)));
} catch (Exception e){
MessageUI.error("Catching a bug in Parameter.jave, value.size="+value.size()+" oldSize="+oldSize+" threadID="+Thread.currentThread().getId());
System.out.println("Catching a bug, value.size="+value.size()+" oldSize="+oldSize+" threadID="+Thread.currentThread().getId());
System.out.println("value="+value.toString());
}
}
} }
private void checkBoolInitialValue(String boolAttr, String attrName) private void checkBoolInitialValue(String boolAttr, String attrName)
......
...@@ -1084,7 +1084,7 @@ public class Tool extends Context implements Cloneable, Inheritable { ...@@ -1084,7 +1084,7 @@ public class Tool extends Context implements Cloneable, Inheritable {
public String[] getExtensions() { public String[] getExtensions() {
if(extensions == null) if(extensions == null)
return null; return null;
FormatProcessor topProcessor=new FormatProcessor(null,null); FormatProcessor topProcessor=new FormatProcessor(this);
FormatProcessor processor = new FormatProcessor( FormatProcessor processor = new FormatProcessor(
new Recognizer[] { new Recognizer[] {
new ContextParamRecognizer(this,topProcessor), new ContextParamRecognizer(this,topProcessor),
...@@ -1117,11 +1117,11 @@ public class Tool extends Context implements Cloneable, Inheritable { ...@@ -1117,11 +1117,11 @@ public class Tool extends Context implements Cloneable, Inheritable {
// Can be two different processors for labels and resources // Can be two different processors for labels and resources
//SimpleGeneratorRecognizer(true) may be not needed, as current file is already set here //SimpleGeneratorRecognizer(true) may be not needed, as current file is already set here
FormatProcessor topProcessor=new FormatProcessor(null,null); FormatProcessor topProcessor=new FormatProcessor(this);
FormatProcessor processor = new FormatProcessor( FormatProcessor processor = new FormatProcessor(
new Recognizer[] { new Recognizer[] {
new ContextParamRecognizer(this,topProcessor), new ContextParamRecognizer(this,topProcessor),
new SimpleGeneratorRecognizer(true) // in menuMode new SimpleGeneratorRecognizer(true,topProcessor) // in menuMode
// new SimpleGeneratorRecognizer(false) // in menuMode // new SimpleGeneratorRecognizer(false) // in menuMode
},topProcessor); // null for topFormatProcessor - this generator can not reference other parameters },topProcessor); // null for topFormatProcessor - this generator can not reference other parameters
...@@ -1158,11 +1158,11 @@ public class Tool extends Context implements Cloneable, Inheritable { ...@@ -1158,11 +1158,11 @@ public class Tool extends Context implements Cloneable, Inheritable {
// Should be called after getMenuActions to have updateContextOptions() already ran // Should be called after getMenuActions to have updateContextOptions() already ran
public String getIgnoreFilter(){ // calculate and get public String getIgnoreFilter(){ // calculate and get
if (ignoreFilter==null) return null; if (ignoreFilter==null) return null;
FormatProcessor topProcessor=new FormatProcessor(null,null); FormatProcessor topProcessor=new FormatProcessor(this);
FormatProcessor processor = new FormatProcessor( FormatProcessor processor = new FormatProcessor(
new Recognizer[] { new Recognizer[] {
new ContextParamRecognizer(this,topProcessor), new ContextParamRecognizer(this,topProcessor),
new SimpleGeneratorRecognizer(true) // in menuMode new SimpleGeneratorRecognizer(true,topProcessor) // in menuMode
// new SimpleGeneratorRecognizer(false) // in menuMode // new SimpleGeneratorRecognizer(false) // in menuMode
},topProcessor); // null for topFormatProcessor - this generator can not reference other parameters },topProcessor); // null for topFormatProcessor - this generator can not reference other parameters
List<String> results=null; List<String> results=null;
...@@ -1306,11 +1306,13 @@ public class Tool extends Context implements Cloneable, Inheritable { ...@@ -1306,11 +1306,13 @@ public class Tool extends Context implements Cloneable, Inheritable {
protected List<String> buildCommandString(String paramStringTemplate, FormatProcessor topProcessor) protected List<String> buildCommandString(String paramStringTemplate, FormatProcessor topProcessor)
throws ToolException throws ToolException
{ {
if (topProcessor==null) topProcessor=new FormatProcessor(null,null); if (topProcessor==null) topProcessor=new FormatProcessor(this);
else topProcessor.setCurrentTool(this);
FormatProcessor processor = new FormatProcessor(new Recognizer[] { FormatProcessor processor = new FormatProcessor(new Recognizer[] {
new ToolParamRecognizer(this,topProcessor), new ToolParamRecognizer(this,topProcessor),
// new SimpleGeneratorRecognizer(), // new SimpleGeneratorRecognizer(),
new SimpleGeneratorRecognizer(this), // new SimpleGeneratorRecognizer(this),
new SimpleGeneratorRecognizer(topProcessor),
new RepeaterRecognizer(), new RepeaterRecognizer(),
new ContextParamRecognizer(this,topProcessor), new ContextParamRecognizer(this,topProcessor),
new ContextParamRepeaterRecognizer(this) new ContextParamRepeaterRecognizer(this)
......
...@@ -31,6 +31,7 @@ import com.elphel.vdt.Txt; ...@@ -31,6 +31,7 @@ import com.elphel.vdt.Txt;
import com.elphel.vdt.VDT; import com.elphel.vdt.VDT;
import com.elphel.vdt.core.launching.LaunchCore; import com.elphel.vdt.core.launching.LaunchCore;
import com.elphel.vdt.core.launching.ToolLogFile; import com.elphel.vdt.core.launching.ToolLogFile;
import com.elphel.vdt.core.launching.VDTLaunchUtil;
import com.elphel.vdt.core.tools.ToolsCore; import com.elphel.vdt.core.tools.ToolsCore;
import com.elphel.vdt.core.tools.params.Tool.TOOL_MODE; import com.elphel.vdt.core.tools.params.Tool.TOOL_MODE;
import com.elphel.vdt.core.tools.params.Tool.TOOL_STATE; import com.elphel.vdt.core.tools.params.Tool.TOOL_STATE;
...@@ -133,9 +134,11 @@ public class ToolSequence { ...@@ -133,9 +134,11 @@ public class ToolSequence {
public void toolFinished(Tool tool){ public void toolFinished(Tool tool){
if (tool!=null) doToolFinished(tool); if (tool!=null) doToolFinished(tool);
if (designFlowView!=null){ if (designFlowView!=null){
// System.out.print("1.designFlowView.updateLaunchAction() threadID="+Thread.currentThread().getId());
Display.getDefault().syncExec(new Runnable() { Display.getDefault().syncExec(new Runnable() {
public void run() { public void run() {
designFlowView.updateLaunchAction(); // Run from Display thread to prevent "invalid thread access" when called from Runner designFlowView.updateLaunchAction(); // Run from Display thread to prevent "invalid thread access" when called from Runner
// System.out.println(" 2.designFlowView.updateLaunchAction() threadID="+Thread.currentThread().getId());
} }
}); });
} }
...@@ -179,7 +182,7 @@ public class ToolSequence { ...@@ -179,7 +182,7 @@ public class ToolSequence {
if (isStop()){ if (isStop()){
Tool waitingTool=findWaitingTool(); Tool waitingTool=findWaitingTool();
if (waitingTool!=null){ if (waitingTool!=null){
waitingTool.setState(TOOL_STATE.FAILURE); // waitingTool.setState(TOOL_STATE.FAILURE);
DEBUG_PRINT("doToolFinished("+tool.getName()+") "+tool.toString()+" state="+tool.getState()+" threadID="+Thread.currentThread().getId()); DEBUG_PRINT("doToolFinished("+tool.getName()+") "+tool.toString()+" state="+tool.getState()+" threadID="+Thread.currentThread().getId());
waitingTool.setMode(TOOL_MODE.STOP); waitingTool.setMode(TOOL_MODE.STOP);
} }
...@@ -275,7 +278,8 @@ public class ToolSequence { ...@@ -275,7 +278,8 @@ public class ToolSequence {
twa.getIgnoreFilter()); //ignoreFilter); twa.getIgnoreFilter()); //ignoreFilter);
tool.setMode(twa.getMode()) ; //TOOL_MODE.RUN); tool.setMode(twa.getMode()) ; //TOOL_MODE.RUN);
tool.setChoice(twa.getChoice()); tool.setChoice(twa.getChoice());
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_THREAD_CONFICT))
System.out.println(">>>>>>>> launching: "+tool.getName()+" threadID="+Thread.currentThread().getId());
LaunchCore.launch( tool, LaunchCore.launch( tool,
SelectedResourceManager.getDefault().getSelectedProject(), SelectedResourceManager.getDefault().getSelectedProject(),
twa.getFullPath(), twa.getFullPath(),
...@@ -289,6 +293,8 @@ public class ToolSequence { ...@@ -289,6 +293,8 @@ public class ToolSequence {
// SelectedResourceManager.getDefault().updateActionChoice(fullPath, choice, ignoreFilter); // Andrey // SelectedResourceManager.getDefault().updateActionChoice(fullPath, choice, ignoreFilter); // Andrey
// SelectedResourceManager.getDefault().setBuildStamp(); // Andrey // SelectedResourceManager.getDefault().setBuildStamp(); // Andrey
// apply designFlowView to the tool itself // apply designFlowView to the tool itself
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_THREAD_CONFICT))
System.out.println(">>>>>>>> launching 2: "+tool.getName()+" threadID="+Thread.currentThread().getId());
LaunchCore.launch( tool, LaunchCore.launch( tool,
SelectedResourceManager.getDefault().getSelectedProject(), SelectedResourceManager.getDefault().getSelectedProject(),
SelectedResourceManager.getDefault().getChosenTarget(), SelectedResourceManager.getDefault().getChosenTarget(),
...@@ -534,6 +540,8 @@ public class ToolSequence { ...@@ -534,6 +540,8 @@ public class ToolSequence {
System.out.println("Failed to initiate continueRunningTools() for tool="+tool.getName()); System.out.println("Failed to initiate continueRunningTools() for tool="+tool.getName());
} }
} else { } else {
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_THREAD_CONFICT))
System.out.println(">>>>>>>> launching 3: "+tool.getName()+" threadID="+Thread.currentThread().getId());
LaunchCore.launch( tool, LaunchCore.launch( tool,
SelectedResourceManager.getDefault().getSelectedProject(), SelectedResourceManager.getDefault().getSelectedProject(),
fullPath, fullPath,
...@@ -557,6 +565,8 @@ public class ToolSequence { ...@@ -557,6 +565,8 @@ public class ToolSequence {
tool.setChoice(0); tool.setChoice(0);
SelectedResourceManager.getDefault().updateActionChoice(fullPath, 0, null); // Andrey SelectedResourceManager.getDefault().updateActionChoice(fullPath, 0, null); // Andrey
SelectedResourceManager.getDefault().setBuildStamp(); // OK - even for log? Or use old/selected one? SelectedResourceManager.getDefault().setBuildStamp(); // OK - even for log? Or use old/selected one?
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_THREAD_CONFICT))
System.out.println(">>>>>>>> launching 4: "+tool.getName()+" threadID="+Thread.currentThread().getId());
// apply designFlowView to the tool itself // apply designFlowView to the tool itself
LaunchCore.launch(tool, LaunchCore.launch(tool,
SelectedResourceManager.getDefault().getSelectedProject(), SelectedResourceManager.getDefault().getSelectedProject(),
...@@ -614,6 +624,7 @@ public class ToolSequence { ...@@ -614,6 +624,7 @@ public class ToolSequence {
return; return;
} }
tryAutoSave(toolsToSave.get(0)); // launch autosave and trigger toolFinished() when done tryAutoSave(toolsToSave.get(0)); // launch autosave and trigger toolFinished() when done
releaseSave();
} }
} }
public void releaseSave(){ public void releaseSave(){
...@@ -629,6 +640,7 @@ public class ToolSequence { ...@@ -629,6 +640,7 @@ public class ToolSequence {
return saveOn; return saveOn;
} }
public boolean isSaveEnabled(){ public boolean isSaveEnabled(){
// System.out.println("isSaveEnabled(): "+!getToolsToSave().isEmpty());
return !getToolsToSave().isEmpty(); return !getToolsToSave().isEmpty();
} }
...@@ -861,6 +873,8 @@ public class ToolSequence { ...@@ -861,6 +873,8 @@ public class ToolSequence {
// apply designFlowView to the tool itself // apply designFlowView to the tool itself
Display.getDefault().asyncExec(new Runnable() { Display.getDefault().asyncExec(new Runnable() {
public void run() { public void run() {
if (VerilogPlugin.getPreferenceBoolean(PreferenceStrings.DEBUG_THREAD_CONFICT))
System.out.println(">>>>>>>> launching 5: "+fTool.getName()+" threadID="+Thread.currentThread().getId());
try { try {
LaunchCore.launch( fTool, LaunchCore.launch( fTool,
fProject, fProject,
...@@ -881,7 +895,7 @@ public class ToolSequence { ...@@ -881,7 +895,7 @@ public class ToolSequence {
DEBUG_PRINT("Finished (auto)save tool "+tool.getName()+" for "+tool.getName()); DEBUG_PRINT("Finished (auto)save tool "+tool.getName()+" for "+tool.getName());
if (isSave()) { // more to save? if (isSave()) { // more to save?
List<Tool> toolsToSave=getToolsToSave(); // find if there are any sessions in unsaved state - returns list (not yet processed) List<Tool> toolsToSave=getToolsToSave(); // find if there are any sessions in unsaved state - returns list (not yet processed)
if ((toolsToSave!=null) && (toolsToSave.size()>=0)){ if ((toolsToSave!=null) && !toolsToSave.isEmpty()){
if (toolsToSave.get(0).getSaveMaster()!=null){ if (toolsToSave.get(0).getSaveMaster()!=null){
System.out.println("Seems to be a BUG that might cause infinite attempts to save while processing tool "+ System.out.println("Seems to be a BUG that might cause infinite attempts to save while processing tool "+
tool.getName()+", first save tool "+toolsToSave.get(0).getName()+ tool.getName()+", first save tool "+toolsToSave.get(0).getName()+
......
...@@ -31,7 +31,7 @@ import com.elphel.vdt.ui.MessageUI; ...@@ -31,7 +31,7 @@ import com.elphel.vdt.ui.MessageUI;
public class StringComparison extends Comparison { public class StringComparison extends Comparison {
private Context context; private Context context;
private String left, right; private String left, right;
private FormatProcessor topProcessor; // private FormatProcessor topProcessor;
// constructor should not reference topProcessor (it is only used at startup) // constructor should not reference topProcessor (it is only used at startup)
public StringComparison(COMPARE_OP op, String left, String right) { public StringComparison(COMPARE_OP op, String left, String right) {
...@@ -66,11 +66,12 @@ public class StringComparison extends Comparison { ...@@ -66,11 +66,12 @@ public class StringComparison extends Comparison {
String actualRight = right; String actualRight = right;
if(context != null) { if(context != null) {
if (topProcessor==null) topProcessor=new FormatProcessor(null,null); if (topProcessor==null) topProcessor=new FormatProcessor(context);
else topProcessor.setCurrentTool(context);
FormatProcessor processor = FormatProcessor processor =
new FormatProcessor(new Recognizer[] { new FormatProcessor(new Recognizer[] {
new ContextParamRecognizer(context,topProcessor), new ContextParamRecognizer(context,topProcessor),
new SimpleGeneratorRecognizer() new SimpleGeneratorRecognizer(topProcessor)
},topProcessor); },topProcessor);
try { try {
......
...@@ -26,35 +26,31 @@ import com.elphel.vdt.core.tools.params.Tool; ...@@ -26,35 +26,31 @@ import com.elphel.vdt.core.tools.params.Tool;
public class DefaultListGeneratorRecognizer implements Recognizer { public class DefaultListGeneratorRecognizer implements Recognizer {
private static final String CONTROL_SEQ = "%"; private static final String CONTROL_SEQ = "%";
private static final int CONTROL_SEQ_LEN = CONTROL_SEQ.length(); private static final int CONTROL_SEQ_LEN = CONTROL_SEQ.length();
private AbstractGenerator[] generators;
private static AbstractGenerator[] generators = new AbstractGenerator[] { // public DefaultListGeneratorRecognizer(boolean menuMode, Tool tool,FormatProcessor topProcessor){
public DefaultListGeneratorRecognizer(boolean menuMode, FormatProcessor topProcessor){
super();
AbstractGenerator[] generators= new AbstractGenerator[]{
new SourceListGenerator("","",null), new SourceListGenerator("","",null),
new FilteredSourceListGenerator("","",null), new FilteredSourceListGenerator("","",null, topProcessor),
new FileListGenerator("","",null) new FileListGenerator("","",null)
}; };
this.generators=generators;
public DefaultListGeneratorRecognizer(){
super();
}
public DefaultListGeneratorRecognizer(boolean menuMode){
super();
for (int i=0;i<generators.length;i++){
generators[i].setMenuMode(menuMode);
}
}
public DefaultListGeneratorRecognizer(boolean menuMode, Tool tool){
super();
for (int i=0;i<generators.length;i++){ for (int i=0;i<generators.length;i++){
generators[i].setMenuMode(menuMode); generators[i].setMenuMode(menuMode);
generators[i].setTool(tool); // generators[i].setTool(tool);
} }
} }
public DefaultListGeneratorRecognizer(Tool tool){ public DefaultListGeneratorRecognizer(FormatProcessor topProcessor){
super(); this(false,topProcessor);
for (int i=0;i<generators.length;i++){
generators[i].setTool(tool);
}
} }
// public DefaultListGeneratorRecognizer(boolean menuMode,FormatProcessor topProcessor){
// this(menuMode,null,topProcessor);
// }
// public DefaultListGeneratorRecognizer(Tool tool, FormatProcessor topProcessor){
// public DefaultListGeneratorRecognizer(Tool tool, FormatProcessor topProcessor){
// this(false,tool,topProcessor);
// }
public RecognizerResult recognize(String template, int startPos, FormatProcessor topProcessor) { public RecognizerResult recognize(String template, int startPos, FormatProcessor topProcessor) {
RecognizerResult result = new RecognizerResult(); RecognizerResult result = new RecognizerResult();
......
...@@ -60,7 +60,7 @@ public class ParamRepeaterRecognizer extends RepeaterRecognizer { ...@@ -60,7 +60,7 @@ public class ParamRepeaterRecognizer extends RepeaterRecognizer {
return new ValueGenerator(param, repPrefix, repSuffix, separator, topProcessor); return new ValueGenerator(param, repPrefix, repSuffix, separator, topProcessor);
/* Trying to put these here */ /* Trying to put these here */
if(genName.equals(FilteredSourceListGenerator.NAME)) if(genName.equals(FilteredSourceListGenerator.NAME))
return new FilteredSourceListGenerator(repPrefix, repSuffix, separator); return new FilteredSourceListGenerator(repPrefix, repSuffix, separator, topProcessor);
else if(genName.equals(SourceListGenerator.NAME)) else if(genName.equals(SourceListGenerator.NAME))
return new SourceListGenerator(repPrefix, repSuffix, separator); return new SourceListGenerator(repPrefix, repSuffix, separator);
else if(genName.equals(FileListGenerator.NAME)) else if(genName.equals(FileListGenerator.NAME))
......
...@@ -105,7 +105,7 @@ public class RepeaterRecognizer implements Recognizer { ...@@ -105,7 +105,7 @@ public class RepeaterRecognizer implements Recognizer {
FormatProcessor topProcessor) FormatProcessor topProcessor)
{ {
System.out.println("Ever get here? RepeaterRecognizer.java:findGenerator()"); // yes, sure System.out.println("Ever get here? RepeaterRecognizer.java:findGenerator()"); // yes, sure
AbstractGenerator gen=new FilteredSourceListGenerator(repPrefix, repSuffix, separator); AbstractGenerator gen=new FilteredSourceListGenerator(repPrefix, repSuffix, separator,topProcessor);
if (genName.equals(gen.getName())) return gen; if (genName.equals(gen.getName())) return gen;
gen=new SourceListGenerator(repPrefix, repSuffix, separator); gen=new SourceListGenerator(repPrefix, repSuffix, separator);
if (genName.equals(gen.getName())) return gen; if (genName.equals(gen.getName())) return gen;
......
...@@ -27,7 +27,11 @@ public class SimpleGeneratorRecognizer implements Recognizer { ...@@ -27,7 +27,11 @@ public class SimpleGeneratorRecognizer implements Recognizer {
private static final String CONTROL_SEQ = "%"; private static final String CONTROL_SEQ = "%";
private static final int CONTROL_SEQ_LEN = CONTROL_SEQ.length(); private static final int CONTROL_SEQ_LEN = CONTROL_SEQ.length();
private static AbstractGenerator[] generators = new AbstractGenerator[] { private AbstractGenerator[] generators;
public SimpleGeneratorRecognizer(FormatProcessor processor){
super();
AbstractGenerator[] templateGenerators = new AbstractGenerator[] {
new OSNameGenerator(), new OSNameGenerator(),
new ProjectNameGenerator(), new ProjectNameGenerator(),
new ProjectPathGenerator(), new ProjectPathGenerator(),
...@@ -36,35 +40,23 @@ public class SimpleGeneratorRecognizer implements Recognizer { ...@@ -36,35 +40,23 @@ public class SimpleGeneratorRecognizer implements Recognizer {
new CurrentFileGenerator(), new CurrentFileGenerator(),
new CurrentFileBaseGenerator(), new CurrentFileBaseGenerator(),
new ChosenActionGenerator(), new ChosenActionGenerator(),
new BuildStampGenerator(), new BuildStampGenerator(processor),
new UserNameGenerator(), new UserNameGenerator(),
new StateDirGenerator(), new StateDirGenerator(processor),
new StateFileGenerator(), new StateFileGenerator(processor),
new StateBaseGenerator() new StateBaseGenerator(processor)
// new SourceListGenerator("","",""), // new SourceListGenerator("","",""),
// new FilteredSourceListGenerator("","","") // new FilteredSourceListGenerator("","","")
}; };
generators=templateGenerators;
public SimpleGeneratorRecognizer(){
super();
}
public SimpleGeneratorRecognizer(boolean menuMode){
super();
for (int i=0;i<generators.length;i++){ for (int i=0;i<generators.length;i++){
generators[i].setMenuMode(menuMode); generators[i].setTopProcessor(processor);
} }
} }
public SimpleGeneratorRecognizer(boolean menuMode, Tool tool){ public SimpleGeneratorRecognizer(boolean menuMode, FormatProcessor processor){
super(); this(processor);
for (int i=0;i<generators.length;i++){ for (int i=0;i<generators.length;i++){
generators[i].setMenuMode(menuMode); generators[i].setMenuMode(menuMode);
generators[i].setTool(tool);
}
}
public SimpleGeneratorRecognizer(Tool tool){
super();
for (int i=0;i<generators.length;i++){
generators[i].setTool(tool);
} }
} }
public RecognizerResult recognize(String template, int startPos, FormatProcessor topProcessor) { public RecognizerResult recognize(String template, int startPos, FormatProcessor topProcessor) {
......
...@@ -397,6 +397,7 @@ public class DesignFlowView extends ViewPart implements ISelectionListener { ...@@ -397,6 +397,7 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
toggleLinkedTools.setImageDescriptor(VDTPluginImages.DESC_TOOLS_LINKED); toggleLinkedTools.setImageDescriptor(VDTPluginImages.DESC_TOOLS_LINKED);
} }
toolSequence.setToolsDirtyFlag(false); //boolean update) - recalculate dirty flags toolSequence.setToolsDirtyFlag(false); //boolean update) - recalculate dirty flags
fDesignFlowView.updateLaunchAction();
} }
}; };
toggleLinkedTools.setToolTipText("Toggle tool dependency"); toggleLinkedTools.setToolTipText("Toggle tool dependency");
...@@ -412,6 +413,8 @@ public class DesignFlowView extends ViewPart implements ISelectionListener { ...@@ -412,6 +413,8 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
toggleSaveTools.setToolTipText("Save tool state"); toggleSaveTools.setToolTipText("Save tool state");
toggleSaveTools.setImageDescriptor(VDTPluginImages.DESC_TOOLS_SAVE); toggleSaveTools.setImageDescriptor(VDTPluginImages.DESC_TOOLS_SAVE);
//isSaveEnabled()
toggleStopTools= new Action("Stop tools", Action.AS_CHECK_BOX) { toggleStopTools= new Action("Stop tools", Action.AS_CHECK_BOX) {
public void run() { public void run() {
...@@ -906,36 +909,10 @@ public class DesignFlowView extends ViewPart implements ISelectionListener { ...@@ -906,36 +909,10 @@ public class DesignFlowView extends ViewPart implements ISelectionListener {
&& (selectedItem.getTool() != null); && (selectedItem.getTool() != null);
showPropertiesAction.setEnabled(enabled); showPropertiesAction.setEnabled(enabled);
clearToolPropertiesAction.setEnabled(enabled); clearToolPropertiesAction.setEnabled(enabled);
toggleSaveTools.setEnabled(toolSequence.isSaveEnabled());
((ViewLabelProvider) viewer.getLabelProvider()).fireChanged(); ((ViewLabelProvider) viewer.getLabelProvider()).fireChanged();
/*
viewer.getTree().update();
viewer.refresh();
System.out.println("DesignFlowView: should update now");
// Display.update();
compositeParent.getDisplay().update();
String menuTitle=getMenuTitle();
if (menuTitle.endsWith("*")){
changeMenuTitle(menuTitle.substring(0,menuTitle.length()-1));
}else {
changeMenuTitle(menuTitle+"*");
}
// changeMenuTitle(menuTitle+"***");
compositeParent.redraw(); // widget is disposed
compositeParent.update();
// changeMenuTitle(menuTitle+"");
//Well you need to determine the row position range for the child rows you want to refresh and then fire a RowVisualChangeEvent.
// That should do the trick.
// System.out.println("count="+viewer.get)
Tree tree=viewer.getTree();
System.out.println("count="+tree.getItemCount());
TreeItem [] items=tree.getItems();
for (TreeItem ti:items){
System.out.println("--- "+ti.getText());
}
// ((BaseLabelProvider) viewer.getLabelProvider()).fireLabelProviderChanged(new LabelProviderChangedEvent( null));
((ViewLabelProvider) viewer.getLabelProvider()).fireChanged();
*/
} // updateLaunchAction() } // updateLaunchAction()
private void launchTool( private void launchTool(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment