我正在实施一个新的eclipse重构.这将使开发人员能够将preconditions语句从子方法提取到父方法.
当我在重构向导中选择"完成"时,这一切都很完美,但是当我选择"预览"时,我收到错误"没有提供目标编辑".这似乎是由TextEdit
返回的问题引起的ASTRewrite.rewriteAST()
.但是我无法弄清楚为什么.
我的Refactoring.createChange()
代码运行后发生异常的堆栈跟踪,并且更改用于生成预览.
org.eclipse.text.edits.MalformedTreeException: No target edit provided.
at org.eclipse.text.edits.MoveSourceEdit.performConsistencyCheck(MoveSourceEdit.java:208)
at org.eclipse.text.edits.TextEdit.traverseConsistencyCheck(TextEdit.java:873)
at org.eclipse.text.edits.MoveSourceEdit.traverseConsistencyCheck(MoveSourceEdit.java:183)
at org.eclipse.text.edits.TextEdit.traverseConsistencyCheck(TextEdit.java:869)
at org.eclipse.text.edits.TextEdit.traverseConsistencyCheck(TextEdit.java:869)
at org.eclipse.text.edits.TextEditProcessor.checkIntegrityDo(TextEditProcessor.java:176)
at org.eclipse.text.edits.TextEdit.dispatchCheckIntegrity(TextEdit.java:743)
at org.eclipse.text.edits.TextEditProcessor.performEdits(TextEditProcessor.java:151)
at org.eclipse.ltk.core.refactoring.TextChange.getPreviewDocument(TextChange.java:534)
at org.eclipse.ltk.core.refactoring.TextChange.getPreviewDocument(TextChange.java:403)
at org.eclipse.ltk.core.refactoring.TextChange.getPreviewContent(TextChange.java:411)
at org.eclipse.ltk.internal.ui.refactoring.TextEditChangePreviewViewer.setInput(TextEditChangePreviewViewer.java:209)
at org.eclipse.ltk.internal.ui.refactoring.AbstractChangeNode.feedInput(AbstractChangeNode.java:99)
at org.eclipse.ltk.internal.ui.refactoring.PreviewWizardPage.showPreview(PreviewWizardPage.java:598)
at org.eclipse.ltk.internal.ui.refactoring.PreviewWizardPage.access$6(PreviewWizardPage.java:583)
at org.eclipse.ltk.internal.ui.refactoring.PreviewWizardPage$7.selectionChanged(PreviewWizardPage.java:574)
at org.eclipse.jface.viewers.Viewer$2.run(Viewer.java:162)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.runtime.Platform.run(Platform.java:888)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:48)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:160)
at org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:2132)
at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1669)
at org.eclipse.jface.viewers.TreeViewer.setSelection(TreeViewer.java:1124)
at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:392)
at org.eclipse.ltk.internal.ui.refactoring.PreviewWizardPage.setVisible(PreviewWizardPage.java:505)
at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.makeVisible(RefactoringWizardDialog2.java:762)
at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.showCurrentPage(RefactoringWizardDialog2.java:477)
at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.nextOrPreviewPressed(RefactoringWizardDialog2.java:507)
at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.access$2(RefactoringWizardDialog2.java:492)
at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2$1.widgetSelected(RefactoringWizardDialog2.java:691)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) …
Run Code Online (Sandbox Code Playgroud) 每当我发现自己需要在C++程序中序列化对象时,我就会回到这种模式:
class Serializable {
public:
static Serializable *deserialize(istream &is) {
int id;
is >> id;
switch(id) {
case EXAMPLE_ID:
return new ExampleClass(is);
//...
}
}
void serialize(ostream &os) {
os << getClassID();
serializeMe(os);
}
protected:
int getClassID()=0;
void serializeMe(ostream &os)=0;
};
Run Code Online (Sandbox Code Playgroud)
以上在实践中效果很好.但是,我听说这种类ID转换是邪恶的,反模式; 什么是在C++中处理序列化的标准OO方式?
您可能知道,Microsoft最近为Visual Studio部署了一个安全更新:KB971090.
除此之外,这还将Visual C运行时DLL从版本8.0.50727.762更新为8.0.50727.4053.
因此,在此更新之后,我编译的所有使用动态链接的运行时,将其依赖项更新为新的运行时.
当然,对于新的应用程序,可以更新到新的,可能更安全的版本.
但我也希望能够保留旧的依赖 - 例如,我可能想构建一个只需要替换一个DLL的fixpack(如果我在更新后尝试这样做,我会得到可怕的"此应用程序无法启动,因为应用程序配置不正确."除非我还分发更新的运行时).
有没有办法做到这一点,或者我需要保留两个Visual Studio安装:一个更新,一个未更新?
我试图将一些Java代码移植到scala.代码使用带有成员调用的注释,type
但这是scala中的关键字.有没有办法在scala中解决这个有效的java成员?
这是Java代码
@Component(
name = "RestProcessorImpl",
type = mediation // Compile error
)
public class RestProcessorImpl {
// impl
}
Run Code Online (Sandbox Code Playgroud)
这部分代码在scala中是相同的,除了它type
是一个关键字,因此它不能编译.有没有办法逃避type
关键字?
这也是带有type
成员的java类的问题
HasType.java
package spike1;
public class HasType {
public String type() {
return "the type";
}
}
Run Code Online (Sandbox Code Playgroud)
UseType.scala
class UseType {
def hasType = new HasType
hasType.type() // Compile error
}
Run Code Online (Sandbox Code Playgroud) 我有一个C ++ Windows应用程序,每个事务都会泄漏内存。使用perfmon,我可以看到每个事务的专用字节都增加了,而应用程序空闲时内存使用率却是稳定的。
按照先前关于stackoverflow的答案,我使用了Microsoft调试工具中的umdh来跟踪一次内存泄漏。但是仍然有更多的泄漏,并且umdh的结果与我的性能结果不符。
First umdh仍然报告此泄漏,堆栈跟踪为:
+ 36192 ( 2082056 - 2045864) 251 allocs BackTraceCB
+ 4 ( 251 - 247) BackTraceCB allocations
ntdll!RtlAllocateHeapSlowly+00000041
ntdll!RtlAllocateHeap+00000E9F
MSVCR80!malloc+0000007A
Run Code Online (Sandbox Code Playgroud)
这是没有用的,因为第一个调用是malloc,没有说什么叫它。我对这种泄漏感到怀疑,因为在应用程序正在处理事务和空闲时都会报告该泄漏。但是我可以清楚地看到空闲时没有内存泄漏。并且在处理事务时报告的内存泄漏与作为性能报告处理的事务不成比例。
umhd没有显示任何其他泄漏,尽管我知道至少还有一个未显示。我刚刚从网上搜索中学到Windows应用程序可以有多个堆。
当我用尽所有选项时,将不胜感激地收到任何跟踪此问题的指针。
我正在尝试将过时的Ant构建转换为Gradle。该项目包含Java 50个子项目和10个Scala子项目。Java项目仅包含Java,而Scala项目仅包含Scala。每个项目都由Java构建,然后由Scala构建,这大大降低了我们的构建速度。
我想在根build.gradle文件中放置尽可能多的通用逻辑,如下所示:
subprojects {
apply plugin: 'java'
apply plugin: 'scala'
sourceCompatibility=1.7
targetCompatibility=1.7
sourceSets {
main {
scala {
srcDir 'src'
}
java {
srcDir 'src'
}
}
test {
scala {
srcDir 'test'
}
java {
srcDir 'test'
}
}
}
repositories {
mavenCentral()
}
dependencies {
scalaTools "org.scala-lang:scala-compiler:2.9.3"
compile "org.scala-lang:scala-library:2.9.3"
}
// Use the sbt compiler (not scalac ant task)
tasks.withType(ScalaCompile) {
scalaCompileOptions.useAnt = false
}
task showCompileClasspath << {
sourceSets.main.compileClasspath.each { println it }
}
test { …
Run Code Online (Sandbox Code Playgroud) 我正在QtCreator中用QT4.5编写一个小gui应用程序.
应用程序的主屏幕包含一个带有两列的QTreeView,第一个是文本,第二个是一组图标.这些图标代表行中显示的项目的最后几个状态.
我不确定最好的办法是什么.我目前通过生成模型data()
方法的QPixmap来实现这一点.
QVariant MyModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole || role == Qt::EditRole) {
switch(index.column()) {
case 0:
return item_.at(index.row()).title();
}
}
if (role == Qt::DecorationRole) {
switch(index.column()) {
case 1:
return makeImage(item_.add(index.row()).lastStates());
}
}
return QVariant();
}
QVariant MyModel::makeImage(const QList<MyState> &states) const
{
const int IconSize = 22;
QPixmap image(IconSize * states.size(), IconSize);
QPainter painter(&image);
painter.fillRect(0, 0, IconSize * count, IconSize, Qt::transparent);
for (int i = 0; i < states.size(); ++i) …
Run Code Online (Sandbox Code Playgroud) c++ ×4
java ×3
scala ×2
build ×1
dependencies ×1
eclipse ×1
gradle ×1
memory-leaks ×1
qt ×1
qt4 ×1
refactoring ×1
runtime ×1
visual-c++ ×1