Package melnorme.lang.ide.debug.core.services

Source Code of melnorme.lang.ide.debug.core.services.MIVariableManager_LangExtension$MIVariableObject_Extension

package melnorme.lang.ide.debug.core.services;

import org.eclipse.cdt.dsf.gdb.GDBTypeParser;
import org.eclipse.cdt.dsf.gdb.GDBTypeParser.GDBDerivedType;
import org.eclipse.cdt.dsf.gdb.GDBTypeParser.GDBType;
import org.eclipse.cdt.dsf.mi.service.MIVariableManager;
import org.eclipse.cdt.dsf.mi.service.command.output.MIVar;
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
import org.eclipse.cdt.dsf.service.DsfSession;

public class MIVariableManager_LangExtension extends MIVariableManager {
 
  public MIVariableManager_LangExtension(DsfSession session, DsfServicesTracker tracker) {
    super(session, tracker);
  }
 
  @Override
  protected MIRootVariableObject createRootVariableObject(VariableObjectId id) {
    return new MIRootVariableObject_Extension(id);
  }
 
  @Override
  protected MIVariableObject createVariableObject(VariableObjectId id, MIVariableObject parentObj) {
    return new MIVariableObject_Extension(id, parentObj);
  }
 
  protected class MIRootVariableObject_Extension extends MIRootVariableObject {
   
    protected GDBType corrected_gdbType;
   
    private MIRootVariableObject_Extension(VariableObjectId id) {
      super(id);
    }
   
    @Override
    public void setType(String newTypeName) {
      super.setType(newTypeName);
      corrected_gdbType = getCorrectedGdbType(newTypeName, super.getGDBType());
    }
   
    @Override
    public GDBType getGDBType() {
      return corrected_gdbType;
    }
   
    @Override
    protected MIVariableObject createChild(VariableObjectId childId, String childFullExpression, int indexInParent,
        MIVar childData) {
      childFullExpression = createChild_getChildFullExpression(childFullExpression, childData);
      return super.createChild(childId, childFullExpression, indexInParent, childData);
    }
   
  }

  protected class MIVariableObject_Extension extends MIVariableObject {
   
    protected GDBType corrected_gdbType;
   
    public MIVariableObject_Extension(VariableObjectId id, MIVariableObject parentObj) {
      super(id, parentObj);
    }
   
    @Override
    public void setType(String newTypeName) {
      super.setType(newTypeName);
      corrected_gdbType = getCorrectedGdbType(newTypeName, super.getGDBType());
    }
   
    @Override
    public GDBType getGDBType() {
      return corrected_gdbType;
    }
   
    @Override
    protected MIVariableObject createChild(VariableObjectId childId, String childFullExpression, int indexInParent,
        MIVar childData) {
      childFullExpression = createChild_getChildFullExpression(childFullExpression, childData);
      return super.createChild(childId, childFullExpression, indexInParent, childData);
    }
   
  }
 
  protected final GDBTypeParser gdbTypeParser = new GDBTypeParser();

  @SuppressWarnings("unused")
  protected GDBType getCorrectedGdbType(String newTypeName, GDBType gdbType) {
    if(gdbType.getType() == GDBType.ARRAY && gdbType instanceof GDBDerivedType) {
      GDBDerivedType gdbDerivedType = (GDBDerivedType) gdbType;
      if(gdbDerivedType.getDimension() == 0) {
        // Correct a limitation in the GDBTypeParser when a "[]" type decl is present
        // CDT will think it's a pointer-like C-style array, and will try to display a custom node structure.
        // But in other languages, it's more likely to be a struct, so report as generic type.
        gdbType = gdbTypeParser.new GDBDerivedType(gdbDerivedType.getChild(), GDBType.GENERIC);
      }
    }
    return gdbType;
  }
 
  @SuppressWarnings("unused")
  public String createChild_getChildFullExpression(String childFullExpression, MIVar childData) {
    return childFullExpression;
  }
 
}
TOP

Related Classes of melnorme.lang.ide.debug.core.services.MIVariableManager_LangExtension$MIVariableObject_Extension

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.