blob: 757b1a88481479f171069d31d94744fb6ec58498 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package spechelper;
import dalvik.annotation.TestTargetClass;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import java.util.List;
import java.util.Vector;
import java.util.regex.Pattern;
/**
* <p>
* a plugin to auto-insert the following annotation constructs:
* TestInfo.java, TestStatus.java, TestTarget.java, and TestTargetClass.java
* under
* /android/device/dalvik/libcore/dalvik/src/main/java/dalvik/annotation/
* <p>
* usage:<br>
* - install export/plugins/spechelper_1.0.0.jar into your eclipse/plugin folder.<br>
* - restart eclipse<br>
* - open a java file<br>
* - insert the TestTargetClass annotation above the class declaration, e.g.
* <code>@TestTargetClass(Pattern.class)</code><br>
* - insert a ":" one line above the signature of a method to be annotated,
* and press ctrl-space for eclipse autocompletion. a popup appears which
* lists all target methods. choose one, and the annotation will be filled in
* at the cursor position.<br>
* <p>
* to annotate more than one target method, simply add a comma after the
* first TestTarget, press enter and insert a ":", press ctrl-space again.
*
* <p>
* a sample:
*
<pre>
package org.apache.harmony.tests.java.util.regex;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestInfo;
import dalvik.annotation.TestTarget;
import dalvik.annotation.TestStatus;
import junit.framework.TestCase;
import java.util.regex.Pattern;
@TestTargetClass(Pattern.class)
public class PatternTest extends TestCase {
// add ":", press ctrl-space here to let the eclipse plugin generate
// the next few lines
@TestInfo(
status = TestStatus.TBR,
notes = "",
targets = {
@TestTarget(
methodName = "compile",
methodArgs = {String.class}
)
})
public void foo() {
//
}
@TestInfo(
status = TestStatus.TBR,
notes = "",
targets = {
@TestTarget(
methodName = "compile",
methodArgs = {String.class}
),
// add ":", press ctrl-space here to insert another TestTarget
})
public void bar() {
//
}
@TestInfo(
status = TestStatus.TBR,
notes = "",
targets = {
@TestTarget(
methodName = "compile",
methodArgs = {String.class}
),
@TestTarget(
methodName = "split",
methodArgs = {CharSequence.class, int.class}
)
})
public void foobarsample() {
//
}
}
</pre>
*
*
*
*/
public class SimpleComputer implements IJavaCompletionProposalComputer {
public List<ICompletionProposal> computeCompletionProposals(
ContentAssistInvocationContext context, IProgressMonitor monitor) {
List<ICompletionProposal> ret = new Vector<ICompletionProposal>();
try {
int offs = context.getInvocationOffset();
String buffer = context.getDocument().get(0, offs);
//System.out.println("buffer:'"+buffer+"'");
//System.out.println("offset:"+offs);
String keyWord = ":";
String keyWordInfo = "':': noser: autofills the annotation";
int idx = 0;
// find the replacement position
int klen = keyWord.length();
for (int i = 0; i < klen; i++) {
String test = keyWord.substring(0, klen - i);
if (buffer.endsWith(test)) {
idx = klen - i;
break;
}
}
if (idx != 0) {
System.out.println("idx:"+idx);
String replace ="hi there! a longer sample text\nnew line";
ICompletionProposal ci = new MyCompletion(buffer, replace,
context.getInvocationOffset() - idx, idx, replace
.length(), null, keyWordInfo, null, null);
ret.add(ci);
}
} catch (BadLocationException e) {
e.printStackTrace();
}
return ret;
}
public List<ICompletionProposal> computeContextInformation(
ContentAssistInvocationContext context, IProgressMonitor monitor) {
return new Vector<ICompletionProposal>();
}
public String getErrorMessage() {
return "Error from SimpleComputer";
}
public void sessionEnded() {
//System.out.println("session ended");
}
public void sessionStarted() {
//System.out.println("session started");
}
}