Да, вы можете, alert () - это всего лишь метод JavaScript, вы можете переопределить его функциональность.
window.alert = function alert(msg) {
console.log('Hidden Alert ' + msg);
};
Не забудьте запустить этот скрипт контента в document_start в манифесте через содержимое манифеста run_at модификатор скрипта.
Я считаю, что есть расширение, которое просто делает это. Разработчик называет его Nice Alert. https://chrome.google.com/extensions/detail/ehnbelnegmgdnjaghgomaakjcmpcakhk
Следующие ниже шаблоны кода при необходимости создадут регистратор и правильный импорт.
SLF4J
${:import(org.slf4j.Logger,org.slf4j.LoggerFactory)}
private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);
Log4J 2
${:import(org.apache.logging.log4j.LogManager,org.apache.logging.log4j.Logger)}
private static final Logger LOG = LogManager.getLogger(${enclosing_type}.class);
Log4J
${:import(org.apache.log4j.Logger)}
private static final Logger LOG = Logger.getLogger(${enclosing_type}.class);
Источник .
JUL
${:import(java.util.logging.Logger)}
private static final Logger LOG = Logger.getLogger(${enclosing_type}.class.getName());
Мои любимые немногие ...
1: Javadoc, чтобы вставить документ о методе, являющемся методом инъекции объекта Spring.
Method to set the <code>I${enclosing_type}</code> implementation that this class will use.
*
* @param ${enclosing_method_arguments}<code>I${enclosing_type}</code> instance
2: Окно отладки, чтобы создать FileOutputStream и записать содержимое буфера в файл. Используется, когда вы хотите сравнить буфер с прошлым запуском (используя BeyondCompare), или если вы не можете просмотреть содержимое буфера (через inspect), потому что он слишком большой ...
java.io.FileOutputStream fos = new java.io.FileOutputStream( new java.io.File("c:\\x.x"));
fos.write(buffer.toString().getBytes());
fos.flush();
fos.close();
Раздел кода
//--------------------------------------------------------------
// ${title}
//--------------------------------------------------------------
${cursor}
Используйте этот шаблон, чтобы упростить комментирование разделов кода. это не очень сложно, но сэкономило мне много времени:)
Создайте макет с помощью Mockito (в контексте «операторов Java»):
${:importStatic('org.mockito.Mockito.mock')}${Type} ${mockName} = mock(${Type}.class);
И в «Членах типа Java»:
${:import(org.mockito.Mock)}@Mock
${Type} ${mockName};
Макет недействительного метода для выброса исключение:
${:import(org.mockito.invocation.InvocationOnMock,org.mockito.stubbing.Answer)}
doThrow(${RuntimeException}.class).when(${mock:localVar}).${mockedMethod}(${args});
Макет недействительного метода, чтобы сделать что-то:
${:import(org.mockito.invocation.InvocationOnMock,org.mockito.stubbing.Answer)}doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) throws Throwable {
Object arg1 = invocation.getArguments()[0];
return null;
}
}).when(${mock:localVar}).${mockedMethod}(${args});
Проверьте, что смоделированный метод вызывается ровно один раз:
${:importStatic(org.mockito.Mockito.verify,org.mockito.Mockito.times)}
verify(${mock:localVar}, times(1)).${mockMethod}(${args});
Убедитесь, что смоделированный метод никогда не вызывается :
${:importStatic(org.mockito.Mockito.verify,org.mockito.Mockito.never)}verify(${mock:localVar}, never()).${mockMethod}(${args});
Новый связанный список с использованием Google Guava (и аналогичный для hashset и hashmap):
${import:import(java.util.List,com.google.common.collect.Lists)}List<${T}> ${newName} = Lists.newLinkedList();
Также я использую огромный шаблон, который генерирует класс Test. Вот сокращенный фрагмент, который каждый желающий должен настроить:
package ${enclosing_package};
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.junit.runner.RunWith;
// TODO autogenerated test stub
@RunWith(MockitoJUnitRunner.class)
public class ${primary_type_name} {
@InjectMocks
protected ${testedType} ${testedInstance};
${cursor}
@Mock
protected Logger logger;
@Before
public void setup() throws Exception {
}
@Test
public void shouldXXX() throws Exception {
// given
// when
// TODO autogenerated method stub
// then
fail("Not implemented.");
}
}
// Here goes mockito+junit cheetsheet
list_methods - генерирует методы для добавления, удаления, подсчета и содержит для списка
public void add${listname}(${listtype} toAdd){
get${listname}s().add(toAdd);
}
public void remove${listname}(${listtype} toRemove){
get${listname}s().remove(toRemove);
}
public ${listtype} get${listname}(int index){
return get${listname}s().get(index);
}
public int get${listname}Count(){
return get${listname}s().size();
}
public boolean contains${listname}(${listtype} toFind){
return get${listname}s().contains(toFind);
}
${cursor}
id - вставляет аннотации, импорт, поле и получатель для простого JPA @Id
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public Long getId(){
return id;
}
${cursor}
${:import (javax.persistence.GenerationType,javax.persistence.GeneratedValue,javax.persistence.Id)}
Один из моих любимых - foreach :
for (${iterable_type} ${iterable_element} : ${iterable}) {
${cursor}
}
и traceout , так как я часто использую его для отслеживания:
System.out.println("${enclosing_type}.${enclosing_method}()");
] Я только что подумал о другом и однажды нашел его в Интернете, const :
private static final ${type} ${name} = new ${type} ${cursor};
Свойство Bean
private ${Type} ${property};
public ${Type} get${Property}() {
return ${property};
}
public void set${Property}(${Type} ${property}) {
${propertyChangeSupport}.firePropertyChange("${property}", this.${property}, this.${property} = ${property});
}
PropertyChangeSupport
private PropertyChangeSupport ${propertyChangeSupport} = new PropertyChangeSupport(this);${:import(java.beans.PropertyChangeSupport,java.beans.PropertyChangeListener)}
public void addPropertyChangeListener(PropertyChangeListener listener) {
${propertyChangeSupport}.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
${propertyChangeSupport}.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
${propertyChangeSupport}.removePropertyChangeListener(listener);
}
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
${propertyChangeSupport}.removePropertyChangeListener(propertyName, listener);
}
После Java 7 отличный способ настроить средства ведения журнала, которым требуются (или предпочитать) статические ссылки на включающий класс, - это использовать недавно представленный API-интерфейс MethodHandles, чтобы получить класс времени выполнения в статическом контексте.
Пример фрагмента для SLF4J:
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
Помимо того, что он является простым фрагментом в любой среде IDE, он также менее хрупок, если вы переделываете определенные функции в другой класс, потому что вы не будете случайно переносить имя класса с ним.
Для журнала
, небольшая полезная деталь для добавления в переменную-член.
private static Log log = LogFactory.getLog(${enclosing_type}.class);
Получение SWT-цвета из текущего дисплея:
Display.getCurrent().getSystemColor(SWT.COLOR_${cursor})
Suround with syncexec
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable(){
public void run(){
${line_selection}${cursor}
}
});
Используйте одноэлементный шаблон проектирования:
/**
* The shared instance.
*/
private static ${enclosing_type} instance = new ${enclosing_type}();
/**
* Private constructor.
*/
private ${enclosing_type}() {
super();
}
/**
* Returns this shared instance.
*
* @returns The shared instance
*/
public static ${enclosing_type} getInstance() {
return instance;
}
Некоторые дополнительные шаблоны здесь: Ссылка I - Ссылка II
Мне нравится эта:
readfile
${:import(java.io.BufferedReader,
java.io.FileNotFoundException,
java.io.FileReader,
java.io.IOException)}
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(${fileName}));
String line;
while ((line = in.readLine()) != null) {
${process}
}
}
catch (FileNotFoundException e) {
logger.error(e) ;
}
catch (IOException e) {
logger.error(e) ;
} finally {
if(in != null) in.close();
}
${cursor}
ОБНОВЛЕНИЕ : Версия этого шаблона для Java 7:
${:import(java.nio.file.Files,
java.nio.file.Paths,
java.nio.charset.Charset,
java.io.IOException,
java.io.BufferedReader)}
try (BufferedReader in = Files.newBufferedReader(Paths.get(${fileName:var(String)}),
Charset.forName("UTF-8"))) {
String line = null;
while ((line = in.readLine()) != null) {
${cursor}
}
} catch (IOException e) {
// ${todo}: handle exception
}
Мне нравится такой сгенерированный комментарий класса:
/**
* I...
*
* $Id$
*/
«Я ...» сразу же побуждает разработчика описать, что делает класс. Мне кажется, что я решил проблему недокументированных классов.
И, конечно же, $ Id $ - полезное ключевое слово CVS.
Небольшой совет по sysout - мне нравится переименовывать его в "sop". Ничто другое в java-библиотеках не начинается с «sop», поэтому вы можете быстро ввести «sop» и бум, он вставляет.
strf -> String.format ("msg", args)
довольно просто, но позволяет немного сэкономить на вводе.
String.format("${cursor}",)
Ничего особенного для создания кода, но весьма полезно для проверки кода
У меня есть мой шаблон coderev low / med / high выполните следующие действия
/**
* Code Review: Low Importance
*
*
* TODO: Insert problem with code here
*
*/
А затем в представлении «Задачи» - покажет мне все комментарии проверки кода, которые я хочу рассказать во время встречи.
Я использую это для MessageFormat (используя Java 1.4). Таким образом, я уверен, что у меня нет конкатенаций, которые трудно извлечь при интернационализации
i18n
String msg = "${message}";
Object[] params = {${params}};
MessageFormat.format(msg, params);
Также для ведения журнала:
log
if(logger.isDebugEnabled()){
String msg = "${message}"; //NLS-1
Object[] params = {${params}};
logger.debug(MessageFormat.format(msg, params));
}
MessageFormat - заключить выделение в MessageFormat.
${:import(java.text.MessageFormat)}
MessageFormat.format(${word_selection}, ${cursor})
Это позволяет мне переместить курсор на строку, расширить выделение на всю строку (Shift-Alt-Up), затем дважды Ctrl-Пробел.
lock - окружить выделенное строки с попыткой finally lock. Предположим наличие переменной блокировки.
${lock}.acquire();
try {
${line_selection}
${cursor}
} finally {
${lock}.release();
}
NB $ {line_selection}
шаблоны отображаются в меню Окружить с (Alt-Shift-Z).
И equalsbuilder, адаптация построителя хэш-кода:
${:import(org.apache.commons.lang.builder.EqualsBuilder,org.apache.commons.lang.builder.HashCodeBuilder)}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
Отличный шаблон для объявления регистратора.
Я также создаю linfo, ldebug, lwarn, lerror для уровней журнала, которые я использую чаще.
lerror:
logger.error(${word_selection}${});${cursor}
Вызвать исключение IllegalArgumentException с переменной в текущей области (illarg):
throw new IllegalArgumentException(${var});
Лучше
throw new IllegalArgumentException("Invalid ${var} " + ${var});
Я знаю, что удаляю мертвый пост, но хотел поделиться этим для Ради завершения:
Правильная версия шаблона генерации синглтона, которая устраняет дефектную конструкцию блокировки с двойной проверкой (обсуждалась выше и упоминалась в другом месте)
Шаблон создания синглтона:
Назовите это createdingleton
static enum Singleton {
INSTANCE;
private static final ${enclosing_type} singleton = new ${enclosing_type}();
public ${enclosing_type} getSingleton() {
return singleton;
}
}
${cursor}
Для доступа к синглетонам, созданным с использованием выше:
Шаблон ссылки синглтона:
Назовите его getsingleton
:
${type} ${newName} = ${type}.Singleton.INSTANCE.getSingleton();
Еще несколько шаблонов здесь .
Включает: