jjazzboss opened a new issue, #5202:
URL: https://github.com/apache/netbeans/issues/5202
### Apache NetBeans version
Apache NetBeans 16
### What happened
I was editing a java file, I noticed the Exception appeared but not sure
when exactly, and what I was doing when it happened.
### How to reproduce
I can't reproduce but I was editing the switch/case of the 2 methods of a
single java file when it happened. I copied the 2 methods below (if you need
the whole file tell me).
=====
```
@Override
public void noteDragged(MouseEvent e, NoteView nvSource)
{
var neSource = nvSource.getModel();
var point = e.getPoint();
boolean overrideSnapSetting = isOverrideSnapSetting(e);
Point editorPoint = SwingUtilities.convertPoint(nvSource,
e.getPoint(), nvSource.getParent());
editorPoint.x = Math.max(0, editorPoint.x);
editorPoint.x = Math.min(nvSource.getParent().getWidth() - 1,
editorPoint.x);
float editorPointPos = editor.getPositionFromPoint(editorPoint);
Quantization q = editor.getQuantization();
if (!isDragging)
{
// Start dragging
isDragging = true;
dragStartPos = editorPointPos;
dragNoteOffset = point;
dragStartPitch = neSource.getPitch();
mapSrcDragNotes.clear();
// Adjust selection if required
var selectedNotes = editor.getSelectedNotes();
if (!selectedNotes.contains(neSource))
{
editor.unselectAll();
nvSource.setSelected(true);
// Create one drag note
mapSrcDragNotes.put(neSource, neSource.clone());
} else
{
// Create the drag notes for the selected notes
selectedNotes.forEach(ne -> mapSrcDragNotes.put(ne,
ne.clone()));
}
switch (state)
{
case EDITOR:
case RESIZE_WEST:
case RESIZE_EAST:
mapSrcDragNotes.keySet().forEach(ne ->
spModel.replace(ne, mapSrcDragNotes.get(ne)));
break;
case MOVE:
case COPY:
mapSrcDragNotes.values().forEach(ne -> spModel.add(ne));
dragNoteView =
editor.getNoteView(mapSrcDragNotes.get(neSource));
// Listen to ctrl key
addControlKeyListener(dragNoteView);
break;
default:
throw new AssertionError(state.name());
}
LOGGER.log(Level.FINE, "\n----- noteDragged() ----- START ne={0}
state={1} dragNoteStartPos={2} mapSrcDragNotes={3}", new Object[]
{
neSource, state, dragStartPos, mapSrcDragNotes
});
} else
{
// Continue dragging
// Quantize new position if required
if ((editor.isSnapEnabled() && !overrideSnapSetting) ||
(!editor.isSnapEnabled() && overrideSnapSetting))
{
editorPointPos = Quantizer.getQuantized(q, editorPointPos);
}
switch (state)
{
case EDITOR:
break;
case RESIZE_WEST:
{
float dPos = editorPointPos - dragStartPos;
for (var srcNe : mapSrcDragNotes.keySet())
{
float newPos = srcNe.getPositionInBeats() + dPos;
if (newPos >= 0 && dPos <
(srcNe.getDurationInBeats() - 0.05f))
{
var dragNe = mapSrcDragNotes.get(srcNe);
float newDur = srcNe.getDurationInBeats() - dPos;
var newNe = srcNe.getCopyDurPos(newDur, newPos);
spModel.replace(dragNe, newNe);
mapSrcDragNotes.put(srcNe, newNe);
}
}
}
break;
case RESIZE_EAST:
{
float dPos = editorPointPos - dragStartPos;
for (var srcNe : mapSrcDragNotes.keySet())
{
float newDur = Math.max(srcNe.getDurationInBeats() +
dPos, 0.05f);
if (Float.floatToIntBits(srcNe.getDurationInBeats())
!= Float.floatToIntBits(newDur) && (srcNe.getPositionInBeats() + newDur) <
spModel.getBeatRange().to)
{
var dragNe = mapSrcDragNotes.get(srcNe);
var newNe = srcNe.getCopyDur(newDur);
spModel.replace(dragNe, newNe);
mapSrcDragNotes.put(srcNe, newNe);
}
}
}
break;
case COPY:
case MOVE:
{
// Pitch delta
int newPitch = editor.getPitchFromPoint(editorPoint);
int dPitch = newPitch - dragStartPitch;
// Position delta
float dPos = editorPointPos - dragStartPos;
// Apply to each note
for (var sne : mapSrcDragNotes.keySet())
{
var dragNe = mapSrcDragNotes.get(sne);
// Calculate pos/pitch changes
float newPos = sne.getPositionInBeats() + dPos;
newPos = Math.max(0, newPos);
if (newPos + sne.getDurationInBeats() >=
spModel.getBeatRange().to)
{
newPos = spModel.getBeatRange().to -
sne.getDurationInBeats();
}
newPitch = isConstantPitchModifier(e) ?
sne.getPitch() : MidiUtilities.limit(sne.getPitch() + dPitch);
if (dragNe.getPitch() == newPitch &&
Float.floatToIntBits(dragNe.getPositionInBeats()) ==
Float.floatToIntBits(newPos))
{
return;
}
LOGGER.log(Level.FINE, "\nnoteDragged() continue
dragging newPitch={0} newPos={1}", new Object[]
{
newPitch, newPos
});
var newNe = spModel.move(dragNe, newPos); // Does
nothing if newPos unchanged
if (newNe.getPitch() != newPitch)
{
var newNePitch = newNe.getCopyPitch(newPitch);
spModel.replace(newNe, newNePitch);
newNe = newNePitch;
}
mapSrcDragNotes.put(sne, newNe);
}
}
break;
default:
throw new AssertionError(state.name());
}
}
}
@Override
public void noteReleased(MouseEvent e, NoteView nv)
{
if (!isDragging)
{
return;
}
var ne = nv.getModel();
var container = nv.getParent(); // Save if nv is removed
LOGGER.log(Level.FINE, "\nnoteReleased() -- state={0} ne={1}
mapSrcDragNotes={2}", new Object[]
{
state, ne, mapSrcDragNotes
});
switch (state)
{
case EDITOR:
// Nothing
break;
case RESIZE_WEST:
case RESIZE_EAST:
{
// Restore original state before doing the undoable edit
for (var srcNe : mapSrcDragNotes.keySet())
{
var dragNe = mapSrcDragNotes.get(srcNe);
spModel.replace(dragNe, srcNe);
}
String undoText = ResUtil.getString(getClass(),
"ResizeNote");
editor.getUndoManager().startCEdit(undoText);
for (var srcNe : mapSrcDragNotes.keySet())
{
var dragNe = mapSrcDragNotes.get(srcNe);
spModel.replace(srcNe, dragNe);
editor.getNoteView(dragNe).setSelected(true);
}
editor.getUndoManager().endCEdit(undoText);
break;
}
case MOVE:
{
removeControlKeyListener(dragNoteView);
// Restore original state before doing the undoable edit
mapSrcDragNotes.values().forEach(dragNe ->
spModel.remove(dragNe));
String undoText = ResUtil.getString(getClass(), "MoveNote");
editor.getUndoManager().startCEdit(undoText);
for (var srcNe : mapSrcDragNotes.keySet())
{
var dragNe = mapSrcDragNotes.get(srcNe);
spModel.replace(srcNe, dragNe);
editor.getNoteView(dragNe).setSelected(true);
}
editor.getUndoManager().endCEdit(undoText);
break;
}
case COPY:
{
removeControlKeyListener(dragNoteView);
// Restore original state before doing the undoable edit
mapSrcDragNotes.values().forEach(dragNe ->
spModel.remove(dragNe));
String undoText = ResUtil.getString(getClass(), "CopyNote");
editor.getUndoManager().startCEdit(undoText);
for (var srcNe : mapSrcDragNotes.keySet())
{
var dragNe = mapSrcDragNotes.get(srcNe);
spModel.add(dragNe);
editor.getNoteView(dragNe).setSelected(true);
editor.getNoteView(srcNe).setSelected(false);
}
editor.getUndoManager().endCEdit(undoText);
break;
}
default:
throw new AssertionError(state.name());
}
isDragging = false;
dragStartPos = -1;
mapSrcDragNotes.clear();
dragNoteOffset = null;
dragNoteView = null;
changeState(State.EDITOR, container);
}
### Did this work correctly in an earlier version?
No / Don't know
### Operating System
Win10 x64
### JDK
JDK 17 x64 Adoptium
### Apache NetBeans packaging
Apache NetBeans binary zip
### Anything else
_No response_
### Are you willing to submit a pull request?
No
### Code of Conduct
Yes
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists